将流量从Kubernetes pod转发到本地服务器

ifmq2ha2  于 2024-01-06  发布在  Kubernetes
关注(0)|答案(4)|浏览(138)

如何将流量从远程Kubernetes pod转发到本地机器上运行的服务器?目的是测试远程服务器调用本地机器上运行的服务。我已经使用kubectl port-forward将流量从本地服务转发到远程服务,但我需要反过来做。
This solution用于minikube,用于在本地运行Kubernetes,所以这可能不适用于我。

vfh0ocws

vfh0ocws1#

可能有一个“更多K8”的方法,但如果你找不到更好的方法,这里有一个想法-使用ssh。
具体地说,在pod上设置并公开SSH,这样就可以从本地机器访问它,然后在机器上使用ssh创建一个远程ssh隧道。
例如,ssh -R 8080:localhost:80 <exposed-pod-ssh>将pod的localhost:8080转发到本地机器端口80。

5hcedyr0

5hcedyr02#

这是一个非常烦人的任务。
如果手头没有什么特别的东西,你需要从你的调制解调器重定向一个端口到你的机器。大多数人都有不固定的公共ip,所以你需要找到你的公共ip地址(你不能搜索“什么是我的ip”),并希望它不会在你的测试之间改变。有了你的公共ip地址,你可以尝试直接从pod访问,例如:

kubectl exec -ti alpine-pod -- curl 150.136.143.228:8080

字符串
有些集群不会让pod从自己的集群中出去,所以,最好创建一个没有选择器的service,然后添加一个指向你的ip的endpoint

apiVersion: v1
kind: Service
metadata:
  name: to-my-home
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080


然后添加endpoint

apiVersion: v1
kind: Endpoints
metadata:
  name: to-my-home
subsets:
  - addresses:
      - ip: 150.136.143.228
    ports:
      - port: 8080


现在,如果你在同一个命名空间中,你可以这样做:

kubectl exec -ti alpine-pod -- curl to-my-home


一个更好、更简单的解决方案是使用vagrant sharehttps://www.vagrantup.com/docs/share,但你需要一些步骤:
1.安装虚拟机管理程序(VirtualBox、Libvirt、HyperV、VMWare)
1.安装Vagrant
1.在https://app.vagrantup.com上创建和帐户
1.启动机器并使用vagrant share
1.抓取命令返回时显示的URL并在pod/service上使用,端口始终为80
范例:

vagrant init debian/buster64
vagrant login
vagrant up
vagrant share

jucafojl

jucafojl3#

您可以使用网状VPN来实现这一点。类似于https://tailscale.com/

b4wnujal

b4wnujal4#

这不是一种“k8s”的方式,但我在pod内部使用了nc来查看从pod发送到远程服务的http请求。
为此,

  • 我将远程服务的URL挂接到运行Pod中的应用程序目录中的http://localhost:9091
  • 然后,在pod中启动nc,侦听9091:nc -l -p 9091

一旦触发Pod向远程服务发送请求,NC将打印该请求

相关问题