我使用的是 Windows 主机,在 Vagrant 中使用 VirtualBox 提供程序运行 CoreOS,在该 CoreOS 中,我运行着 Kubernetes 0.14.2 单节点集群(我无法让最新版本 0.15 可靠地运行)。我创建了一个 nginx 服务,如Kubernetes Docker 指南。
kubectl -s http://localhost:8080 run-container nginx --image=nginx --port=80 --api-version="v1beta2"
kubectl expose rc nginx --port=80 --api-version="v1beta2"
假设 Kubernetes 服务代理已打开10.0.0.123:80
,当我curl 10.0.0.123
从 CoreOS 机器运行时,我会得到示例 HTML——正是我想要的。
Vagrant VM 有 2 个网络 - NAT 和主机专用适配器都使用 virtio-net。
我已经设置了 Vagrant/VirtualBox 端口转发,因此当我从 Windows 上的端口 8080 访问 VM 时,它将访问 VM 中的端口 80,对吗?
==> coreos-01: Forwarding ports...
coreos-01: 80 => 8080 (adapter 1)
coreos-01: 22 => 2222 (adapter 1)
端口转发有效,因为127.0.0.1:2222
使用 ssh 连接有效。
以下是默认设置和/或由 Kubernetes 设置的路由:
$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-N KUBE-PORTALS-CONTAINER
-N KUBE-PORTALS-HOST
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A PREROUTING -j KUBE-PORTALS-CONTAINER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT -j KUBE-PORTALS-HOST
-A POSTROUTING -s 10.1.0.0/16 ! -o docker0 -j MASQUERADE
-A KUBE-PORTALS-CONTAINER -d 10.0.0.2/32 -p tcp -m comment --comment "default/kubernetes" -m tcp --dport 443 -j REDIRECT --to-ports 51828
-A KUBE-PORTALS-CONTAINER -d 10.0.0.1/32 -p tcp -m comment --comment "default/kubernetes-ro" -m tcp --dport 80 -j REDIRECT --to-ports 35793
-A KUBE-PORTALS-CONTAINER -d 10.0.0.123/32 -p tcp -m comment --comment "default/nginx" -m tcp --dport 80 -j REDIRECT --to-ports 34303
-A KUBE-PORTALS-HOST -d 10.0.0.2/32 -p tcp -m comment --comment "default/kubernetes" -m tcp --dport 443 -j DNAT --to-destination 10.0.2.15:51828
-A KUBE-PORTALS-HOST -d 10.0.0.1/32 -p tcp -m comment --comment "default/kubernetes-ro" -m tcp --dport 80 -j DNAT --to-destination 10.0.2.15:35793
-A KUBE-PORTALS-HOST -d 10.0.0.123/32 -p tcp -m comment --comment "default/nginx" -m tcp --dport 80 -j DNAT --to-destination 10.0.2.15:34303
我的问题是,当我尝试curl 127.0.0.1:8080
从 Windows 机器运行时,我得到了连接被拒绝。如何从 Windows 主机连接到在 Kubernetes 中运行的服务,例如正在运行的东西10.0.0.123:80
?谢谢!
答案1
您可以在创建服务时执行此操作,方法是将字段添加publicIPs
到 JSON 定义,或者使用虚拟机的 IP 地址覆盖:
kubectl expose rc nginx --port=80 --api-version="v1beta2" --overrides='{"publicIPs": ["172.17.8.101"], "apiVersion": "v1beta2"}'
另一个可行的方法是配置 Putty - 在连接 / SSH / 隧道中,添加单独的端口,例如在这种情况下,本地 8080 需要指向 10.0.0.123:80,因此 Putty 会说L8080 10.0.0.123:80
。这很不方便,因为服务 IP 不是静态的。
Vagrant/VirtualBox 中的端口转发可以被删除,但它似乎不起作用。