【问题标题】:Communication between Docker Container and Kubernetes PodDocker Container 和 Kubernetes Pod 之间的通信
【发布时间】:2018-01-01 22:36:24
【问题描述】:

我有 3 个服务器:1. kubernetes Master 2. kubernetes Minion1 3. kubernetes Minion2

在 Kubernetes 主服务器上运行的复制控制器(带有 http 服务),具有 4 个副本(pod),集群 IP 为 10.254.x.x

集群IP可以通过kubectl命令创建的busybox pod访问。

现在我已经在 kubernetes 主服务器上安装了 docker

然后使用 docker run 命令启动一个容器。 所以现在我的问题是:如何在这个 docker 容器和 kubernetes 集群 IP 之间进行通信??

实际目标是:docker容器将充当kubernetes集群IP的反向代理

Docker container IP : 172.17.x.x
Kubernetes Pods IP : 172.17.x.x
Kubernetes cluster IP : 10.254.x.x 

谢谢。

【问题讨论】:

  • 使用入口控制器不是更好吗?
  • 在集群中,Kubernetes 将为您启动容器。您可能想尝试一下,因为这本质上是 Kubernetes 发挥其魔力的原因。

标签: docker kubernetes


【解决方案1】:

您可以使用 NodePort 类型的服务公开 pod。然后您也可以访问网络之外的 pod。如果您将公共 IP 分配给节点,那么它将向公众公开。使用该 url,您可以连接到 k8s 集群之外的容器。

【讨论】:

    【解决方案2】:

    这在很大程度上取决于您如何配置 Kubernetes 集群。

    要访问在您的 kube 集群中运行的服务/pod/容器,您需要在您的 master 上运行 kube-proxy,并且您的非 kube docker 容器在您的集群使用的覆盖网络中运行。

    Service ClusterIP 是通过 kube-proxy 设置 iptables 规则在节点上实现的,因此,假设您有一个不错的覆盖配置,您应该不仅可以从 docker 访问它们,还可以从它自己的主机访问它们(可能有一些路由/ nat 问题要解决,具体取决于设置)。另一个问题是服务发现,它在 kube 中通常通过 DNS 工作,不会暴露在外部,因此您需要将外部容器/进程指向不同的 DNS 服务器(或使用不同的服务发现方式,例如查询/看 kubernetes api)。

    您还可以使用服务通过 NodePort 公开您的流量,在那里您可以通过 kube 集群或 Ingress(以及使用 NodePort/LB 公开的 IngressController)中每个节点的固定端口访问您的 svc。

    也就是说,也许你可以在 Kubernetes 中运行这个容器并强制它在主节点上调度(查找节点亲和性和容忍度)

    【讨论】:

      【解决方案3】:

      正如@Grimmy 所说,我也认为这是通过使用ingress resource and an ingress controller 来实现的。

      例如,带有 nginx 和入口控制器的 pod 可以用作互联网和您的 pod 之间的负载平衡器。

      【讨论】:

      • 嗨 Grimmy 和 oe18 感谢您的回复。我尝试过使用入口控制器,但没有获得入口 IP 地址。 (我所有的 Master Minion 都托管在 ESXi 主机中) 以下是入口的输出:# kubectl get ing demo-ingress NAME HOSTS **ADDRESS** PORTS AGE demo-ingress rahman-site.com 80 11m 从输出中入口 IP 字段为空。是因为我使用的是 ESXi 主机而不是像 google/amazon 这样的云。
      • 只想补充一点,除了入口之外,我还创建了服务和部署控制器。这是服务的输出。这里 EXTERNAL-IP 是空的 # kubectl get service nginx NAME CLUSTER-IP EXTERNAL-IP PORT(S) nginx 10.254.136.150 <none> 80/TCP 23m 请帮忙。
      • 我使用 nodeport IP 作为 IP 将表单连接到我的 nginx 外部,在 nginx 内部我添加集群 IP 以访问应用程序 pod。问题解决了....但是 一个问题 仍然存在,为什么我没有获得 Cluster /Ingress/LoadBalancer IP?它必须需要 gcloud 吗?
      • @rh.mahfuz 不确定。我想,您可以发布另一个问题并包括您的所有设置和配置。现在您已经找出了问题的一部分,下一个问题可能会更具体。至少,我有时会这样做。
      猜你喜欢
      • 1970-01-01
      • 2018-02-12
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多