0

我在 Digital Ocean 上的集群上使用 kubernates。

我在 Pod 的容器内有应用程序。我需要与此应用程序建立外部连接。我需要访问具体实例(因为我有超过 10 个使用此应用程序的 Pod)。

所以,我的问题是:我怎样才能对这个应用程序进行外部访问。

例如我有公共 IP 192.168.9.9

并有 2 个带有实例的 pod。第一个监听端口 8990,它的 Pod IP 是 10.0.0.1,第二个监听端口 8991,它的 Pod IP 是 10.0.0.1。

所以,我需要将流量从 192.168.9.9:8990 重定向到 10.0.0.1:8990 和 192.168.9.9:8991 到 10.0.0.1:8991。

是的,我可以通过手动使用 iptables 来做到这一点。但我想自动完成。当新 Pod 启动时,我想在 iptables 中进行记录。

我可以使用 api 监视服务:

127.0.0.1:8080/api/v1beta1/watch/services

并且可以在这里获取 pod 的 ip:

127.0.0.1:8080/api/v1beta1/pods

我在这里找到了与我的需求类似的解决方案。但这看起来像是糟糕的架构决策。在新 Pod 启动后自动将外部流量重定向到 pod 是否更好?

4

1 回答 1

6

如果您的公共 ip 配置在您的一个仆从的接口上,那么您需要做的就是publicIPs在服务描述中设置值。例如,如果您定义这样的服务:

kind: Service
apiVersion: v1beta1
id: test-web
port: 8888
selector:
  name: test-web
containerPort: 80
publicIPs:
  - 192.168.1.43

然后 Kubernetes 会像这样创建 iptables 规则:

-A KUBE-PORTALS-CONTAINER -d 192.168.1.43/32 -p tcp -m comment --comment test-web -m tcp --dport 8888 -j REDIRECT --to-ports 38541
-A KUBE-PORTALS-HOST -d 192.168.1.43/32 -p tcp -m comment --comment test-web -m tcp --dport 8888 -j DNAT --to-destination 192.168.1.20:38541

这些规则将流量重定向到您的publicIP和端口到本地kube-proxy实例维护的适当端口。我只写了kiwi(很抱歉你不喜欢它!)来提供一种动态分配公共 ip 地址的机制。只要您不介意在接口上预先配置地址,您就应该做好准备。

于 2015-03-14T14:44:43.423 回答