我有一个裸机Kubernetes定制设置(手动使用Kubernetes艰难地设置集群)。一切似乎正常,但是我无法从外部访问服务。

我可以在curl时获得服务列表:

https://<ip-addr>/api/v1/namespaces/kube-system/services

但是,当我尝试代理(使用kubectl proxy,也使用<master-ip-address>:<port>)时:
https://<ip-addr>/api/v1/namespaces/kube-system/services/toned-gecko-grafana:80/proxy/

我得到:
Error: 'dial tcp 10.44.0.16:3000: connect: no route to host'
Trying to reach: 'http://10.44.0.16:3000/'
  • 即使我正常 curl http://10.44.0.16:3000/,我也会遇到相同的错误。这是我是否从安装Kubernetes的VM内部 curl 的结果。能够解决此问题,请检查以下内容。
  • 我可以使用NodePort从外部访问我的服务。
  • 如果通过Nginx-Ingress公开我的服务,我可以访问它们。
  • 我将Weave用作CNI,并且日志很正常,除了开头几行有关它无法访问命名空间的日志行(RBAC错误)。尽管那之后日志还不错。
  • 使用CoreDNS,日志看起来很正常。 APIServer和Kubelet日志看起来很正常。 Kubernetes-Events看起来也很正常。
  • 附加说明:我分配的DNS服务IP是10.3.0.10,服务IP范围是10.3.0.0/24,而POD网络是10.2.0.0/16。我不确定10.44.x.x是什么或它来自哪里。
  • 另外,我正在使用Nginx-Ingress( Helm 图表:https://github.com/helm/charts/tree/master/stable/nginx-ingress)

  • 这是其中一项服务的输出:
    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "kubernetes-dashboard",
        "namespace": "kube-system",
        "selfLink": "/api/v1/namespaces/kube-system/services/kubernetes-dashboard",
        "uid": "5c8bb34f-c6a2-11e8-84a7-00163cb4ceeb",
        "resourceVersion": "7054",
        "creationTimestamp": "2018-10-03T00:22:07Z",
        "labels": {
          "addonmanager.kubernetes.io/mode": "Reconcile",
          "k8s-app": "kubernetes-dashboard",
          "kubernetes.io/cluster-service": "true"
        },
        "annotations": {
          "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"addonmanager.kubernetes.io/mode\":\"Reconcile\",\"k8s-app\":\"kubernetes-dashboard\",\"kubernetes.io/cluster-service\":\"true\"},\"name\":\"kubernetes-dashboard\",\"namespace\":\"kube-system\"},\"spec\":{\"ports\":[{\"port\":443,\"targetPort\":8443}],\"selector\":{\"k8s-app\":\"kubernetes-dashboard\"}}}\n"
        }
      },
      "spec": {
        "ports": [
          {
            "protocol": "TCP",
            "port": 443,
            "targetPort": 8443,
            "nodePort": 30033
          }
        ],
        "selector": {
          "k8s-app": "kubernetes-dashboard"
        },
        "clusterIP": "10.3.0.30",
        "type": "NodePort",
        "sessionAffinity": "None",
        "externalTrafficPolicy": "Cluster"
      },
      "status": {
        "loadBalancer": {
    
        }
      }
    }
    

    我不确定如何调试它,即使某些指向正确方向的指针也会有所帮助。如果还有其他要求,请告诉我。
    kubectl get svc的输出:
    NAME                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
    coredns-primary        ClusterIP   10.3.0.10    <none>        53/UDP,53/TCP,9153/TCP   4h51m
    kubernetes-dashboard   NodePort    10.3.0.30    <none>        443:30033/TCP            4h51m
    

    编辑:

    事实证明,尽管有CoreDNS运行,但由于某种原因我没有运行kube-dns服务。就像这里提到的:https://github.com/kubernetes/kubeadm/issues/1056#issuecomment-413235119

    现在,我可以从VM内部成功 curl 了,但是proxy-access仍然给我同样的错误:No route to host。我不确定为什么或如何解决此问题,因为我在这里看不到DNS,但它解决了该问题。也希望对此有任何可能的解释。

    最佳答案

    我遇到了相同的问题,并通过运行以下命令解决了该问题:

    iptables --flush<br>
    iptables -tnat --flush<br>
    systemctl stop firewalld<br>
    systemctl disable firewalld<br>
    systemctl restart docker<br>
    

    关于networking - Kubernetes:没有通往主机的途径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52619828/

    10-11 22:14
    查看更多