2

在我的本地,我运行一个mysql容器,然后从同一网络上的另一个容器 ping 它:

$ docker run -d tutum/mysql
$ docker run -it plumsempy/plum bash
    # ping MYSQL_CONTAINER_ID

      PING 67e35427d638 (198.105.244.24): 56 data bytes
      64 bytes from 198.105.244.24: icmp_seq=0 ttl=37 time=0.243 ms 
      ...

那很好。然后,在本地使用 Kubernetes(minikube),我使用以下命令部署 tutum/mysql YAML

...
- name: mysql
  image: tutum/mysql
...

mysql容器没有其他东西。然后我部署它,通过 ssh 进入 minikube pod,启动一个随机容器,这次尝试 ping pod 内的 mysql 容器:

$ kubectl create -f k8s-deployment.yml
$ minikube ssh
    $ docker ps
    $ docker run -it plumsempy/plum bash
        # ping MYSQL_CONTAINER_ID_INSIDE_MINIKUBE

          PING mysql (198.105.244.24): 56 data bytes
          ^C--- mysql ping statistics ---
          10 packets transmitted, 0 packets received, 100% packet loss

        # traceroute MYSQL_CONTAINER_ID_INSIDE_MINIKUBE

          traceroute to aa7f7ed7af01 (198.105.244.24), 30 hops max, 60 byte packets
           1  172.17.0.1 (172.17.0.1)  0.031 ms  0.009 ms  0.007 ms
           2  10.0.2.2 (10.0.2.2)  0.156 ms  0.086 ms  0.050 ms
           3  * * *
           4  * * *
           5  dtr02gldlca-tge-0-2-0-1.gldl.ca.charter.com (96.34.102.201)  16.153 ms  16.107 ms  16.077 ms
           6  crr01lnbhca-bue-200.lnbh.ca.charter.com (96.34.98.188)  18.753 ms  18.011 ms  30.642 ms
           7  crr01mtpkca-bue-201.mtpk.ca.charter.com (96.34.96.63)  30.779 ms  30.523 ms  30.428 ms
           8  bbr01mtpkca-bue-2.mtpk.ca.charter.com (96.34.2.24)  24.089 ms  23.900 ms  23.814 ms
           9  bbr01ashbva-tge-0-1-0-1.ashb.va.charter.com (96.34.3.139)  26.061 ms  25.949 ms  36.002 ms
           10  10ge9-10.core1.lax1.he.net (65.19.189.177)  34.027 ms  34.436 ms  33.857 ms
           11  100ge12-1.core1.ash1.he.net (184.105.80.201)  107.873 ms  107.750 ms  104.078 ms
           12  100ge3-1.core1.nyc4.he.net (184.105.223.166)  100.554 ms  100.478 ms  100.393 ms
           13  xerocole-inc.10gigabitethernet12-4.core1.nyc4.he.net (216.66.41.242)  109.184 ms  111.122 ms  111.018 ms
           14  * * *
           15  * * * 
           ...(til it ends)

可以是任何容器,plumsempy/plum因为它们都在同一个网络和同一个 pod 上,ping 应该通过。问题是为什么我无法访问mysqlminikube,我该如何解决?

4

2 回答 2

2

来自k8s 多容器 pod 文档

Pod 共享命运,共享一些资源,例如存储卷和 IP 地址。

因此,可以从IP 地址处的mysql容器访问容器。plum127.0.0.1

此外,由于mysql默认情况下在端口 3306 上运行,您可能想telnet 127.0.0.1 3306检查它是否可访问(ping使用没有端口概念的 ICMP)。

于 2017-01-03T20:43:30.830 回答
2

我猜容器 ID 不适用于 Kubernetes。您还可以看到,容器 ID 解析为公共 IP 198.105.244.24,这看起来是错误的。

您可以通过多种方式联系此 pod:

  • 通过以下方式获取 pod IPkubectl describe -f k8s-deployment.yml
  • 为该 pod创建一个服务mysql并执行以下操作之一(假设服务名称为):
    • 使用环境变量,如ping ${MYSQL_SERVICE_HOST}
    • 像使用DNSping mysql.default.svc.cluster.local
于 2017-01-01T09:55:24.827 回答