Kubernetes - 不是每个pod独特的ip

时间:2016-07-28 13:16:53

标签: kubernetes

我正在构建一个Kubernetes 1.3.2的3 VM(CentOS 7)集群。 根据这个kubernetes文档页面Networking in Kubernetes:“我们为每个pod提供自己的IP地址”,并且当几个pod在同一节点上使用相同的端口时,没有端口冲突。 但是如此处所示,pod确实获得了相同的IP地址:

[root@gloom kuber-test]# kubectl get pods -o wide -l app=userloc
NAME                          READY     STATUS    RESTARTS   AGE       IP           NODE
userloc-dep-857294609-0am9d   1/1       Running   0          27m       172.17.0.5   157.244.150.86
userloc-dep-857294609-a4538   1/1       Running   0          27m       172.17.0.7   157.244.150.96
userloc-dep-857294609-c4wzy   1/1       Running   0          6h        172.17.0.3   157.244.150.86
userloc-dep-857294609-hbl9i   1/1       Running   0          6h        172.17.0.5   157.244.150.96
userloc-dep-857294609-rpgyd   1/1       Running   0          27m       172.17.0.5   157.244.150.198
userloc-dep-857294609-tnnho   1/1       Running   0          6h        172.17.0.3   157.244.150.198

我想念什么?

编辑 - 2016年7月31日:
根据Sven Walter的评论,也许问题在于,不知何故,pod收到的IP是docker bridge子网172.17.0.0/16(每个节点并不明显),而不是法兰绒的子网10.xxx/24 (每个节点不同)。 这可能是问题吗?

如果需要,这是部署yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: userloc-dep 
spec:
  replicas: 6
  template:
    metadata:
      labels:
        app: userloc
    spec:
      containers:
      - name: userloc
        image: globe:5000/openlso/userlocation-ms:0.1 
        ports:
        - containerPort: 8081

3 个答案:

答案 0 :(得分:1)

问题出现了docker documentation我在 /etc/systemd/system/docker.service.d/docker.conf 中添加了额外的docker配置,覆盖了 /usr/lib/systemd/system/docker.service 。不幸的是,我用来设置集群的脚本(master.sh和worker.sh)不是引用第一个文件而是引用第二个文件。
一旦我删除 docker.conf 文件,pod就会得到法兰绒的子网。

答案 1 :(得分:0)

配置法兰绒后,假设你这样做了,每个节点都会抓住整个ip网络cidr的一部分。您可以通过执行etcd ls -r并查找" coreos.com"等密钥来确定将哪个cidr分配给哪个节点。分配给每个节点的子网切片应该是唯一的。

一旦节点有子网,法兰绒就会将cidr分配给flannel.0(vxlan设备),你需要重启docker,例如:https://github.com/coreos/flannel#docker-integration。如果您未能重新启动docker,或者选项错误,或者法兰绒没有在节点上运行,或者非唯一子网被分配给不同的节点,那么事情就不会按预期工作。如果您需要更多帮助调试,请回复此问题,我们可以从那里获取。

答案 2 :(得分:0)

也许它可以帮助你,当我有多个网络接口来修复时我遇到同样的问题我定义了法兰绒用来与其他节点通信的网络接口。

flanneld --iface=enp0s8

就我而言,我在/ etc / sysconfig / flanneld

中进行了更改
FLANNEL_ETCD="http://master.gary.local:2379"
FLANNEL_ETCD_KEY="/atomic.io/network"
FLANNEL_OPTIONS="--iface=enp0s8"

更改后显然你需要重启docker和flanneld守护进程。