2

我想如何从节点内部或外部的任何 pod 调用服务。

我有 3 个带有部署和服务的节点。我已经有一个 kube-proxy。

我在其他 pod 上执行 bash:

kubectl exec --namespace=develop myotherdpod-78c6bfd876-6zvh2 -i -t -- /bin/bash

在我的另一个 pod 中,我尝试执行 curl:

curl -v http://myservice.develop.svc.cluster.local/user

这是我创建的服务:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "myservice",
    "namespace": "develop",
    "selfLink": "/api/v1/namespaces/develop/services/mydeployment-svc",
    "uid": "1b5fb4ae-ecd1-11e7-8599-02cc6a4bf8be",
    "resourceVersion": "10660278",
    "creationTimestamp": "2017-12-29T19:47:30Z",
    "labels": {
      "app": "mydeployment-deployment"
    }
  },
  "spec": {
    "ports": [
      {
        "name": "http",
        "protocol": "TCP",
        "port": 80,
        "targetPort": 8080
      }
    ],
    "selector": {
      "app": "mydeployment-deployment"
    },
    "clusterIP": "100.99.99.140",
    "type": "ClusterIP",
    "sessionAffinity": "None"
  },
  "status": {
    "loadBalancer": {}
  }
}
4

1 回答 1

3

在我看来,您部署的网络覆盖可能有问题。首先,我会仔细检查 pod 是否可以访问 kube-dns 并获取服务的正确 IP。

nslookup myservice.develop.svc.cluster.local
nslookup myservice # If they are in the same namespace it should work as well

如果您能够确认,那么我还会检查 kube-proxy 等服务是否正常工作。您可以使用

systemctl status kube-proxy

如果这不起作用,我还将通过执行检查来自 Overlay 网络的 pod

kubectl get pods --namespace=kube-system

如果一切正常,我会尝试使用不同的网络覆盖:https ://kubernetes.io/docs/concepts/cluster-administration/networking/

如果这也不起作用,我会检查是否有防火墙规则阻止节点之间的某些通信。

于 2018-01-04T12:52:43.070 回答