【问题标题】:Pod cannot connect to itself via service IP (kubernetes v1.10)Pod 无法通过服务 IP 连接到自身(kubernetes v1.10)
【发布时间】:2018-10-07 22:05:31
【问题描述】:

我有一个 kubernetes 集群 (v1.10) 和 flannel 作为 cni。使用默认设置,设置工作正常(使用 kubeadm),但 pod 无法通过服务 IP 连接到自身。

尝试将发夹模式设置为“混杂桥”,但 kubelet 抱怨:

Hairpin mode set to "promiscuous-bridge" but kubenet is not enabled, falling back to "hairpin-veth"

不知道发生了什么。经历了这个https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/#a-pod-cannot-reach-itself-via-service-ip,但没有帮助。有什么指点吗?

【问题讨论】:

  • 通常是iptables有问题。首先检查 kube-proxy 是否启动。在 Pod 所在的节点上运行sudo docker ps | grep kube-proxy
  • 你可以从不同的 pod/node 访问服务 ip 吗?
  • @ccshih 是的 kube-proxy 已启动。
  • @ffledgling Pod 可以与其他 pod 和服务通信。唯一的问题是通过它的服务 IP 连接到自身。
  • @PhagunBaya 问题是其他 pod 是否可以通过它的服务 IP 与这个 pod 通信。如果没有,这个 pod/node 上的网络就搞砸了。如果可以的话,可能是基础机器上的网络插件/自定义配置缺少路由添加。

标签: kubernetes flannel


【解决方案1】:

默认的 flannel 配置没有将 HairpinMode 设置为 true。

https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

在 flannel 配置中将 hairpinMode 设置为 true 解决了该问题。配置更改如下:

kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  labels:
    tier: node
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

完整的法兰绒配置在这里:

https://gist.githubusercontent.com/phagunbaya/2a53519a9427ba0623244f1680a5b5ff/raw/13ada0d6dd92388c8c5aae93bfb1ccaf9c79f60b/flannel-0.9.1.yaml

使用以下命令代替默认的 kubectl 命令来应用 flannel cni:

kubectl apply -f https://gist.githubusercontent.com/phagunbaya/2a53519a9427ba0623244f1680a5b5ff/raw/13ada0d6dd92388c8c5aae93bfb1ccaf9c79f60b/flannel-0.9.1.yaml

【讨论】:

    【解决方案2】:

    在我的情况下,问题不是如下所述禁用 firewalld 服务。我的 core-dns pod 不断因错误 connect - no route to host

    而崩溃

    https://github.com/rancher/rancher/issues/6139

    在提到的每个节点上运行以下命令

    • systemctl stop firewalld
    • systemctl 禁用防火墙

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 2016-04-28
      • 2016-04-16
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 2020-02-04
      相关资源
      最近更新 更多