“externalTrafficPolicy”设置为“Local”时无响应

Joh*_*fer 6 kubernetes

externalTrafficPolicy: Local设置时无法访问以下 Kubernetes 服务。我直接通过 NodePort 访问它,但总是超时。

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "echo",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/services/echo",
    "uid": "c1b66aca-cc53-11e8-9062-d43d7ee2fdff",
    "resourceVersion": "5190074",
    "creationTimestamp": "2018-10-10T06:14:33Z",
    "labels": {
      "k8s-app": "echo"
    }
  },
  "spec": {
    "ports": [
      {
        "name": "tcp-8080-8080-74xhz",
        "protocol": "TCP",
        "port": 8080,
        "targetPort": 3333,
        "nodePort": 30275
      }
    ],
    "selector": {
      "k8s-app": "echo"
    },
    "clusterIP": "10.101.223.0",
    "type": "NodePort",
    "sessionAffinity": "None",
    "externalTrafficPolicy": "Local"
  },
  "status": {
    "loadBalancer": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道对于这个服务的 pod 需要在一个节点上可用,因为流量不会路由到其他节点。我检查了这个。

Ric*_*ico 1

不确定您从哪里进行连接以及您正在输入什么命令来测试连接或您的环境是什么样的。但这很可能是由于这个已知问题externalTrafficPolicy造成的,即Local如果无法kube-proxy找到运行节点的 IP 地址,则无法访问节点端口。

链接更清楚地说明了该问题。显然,--hostname-override从 K8s 1.10 开始,kube-proxy 不起作用。您必须HostnameOverride在 kube-proxy ConfigMap 中指定该选项。这里还描述了一个修复程序,该修复程序将在撰写本文后的某个时候将其提升到上游。