【问题标题】:Kubernetes external access to application in containerKubernetes 外部访问容器中的应用程序
【发布时间】:2015-05-16 20:12:43
【问题描述】:

我在 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

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

【问题讨论】:

    标签: centos iptables google-cloud-platform kubernetes


    【解决方案1】:

    如果您的公共 ip 配置在您的一个 minion 的接口上,那么您需要做的就是在您的服务描述中设置 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-11-22
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多