networking - Kubernetes:没有托管路由

标签 networking kubernetes kubernetes-service

我有一个裸机 Kubernetes 自定义设置(使用 Kubernetes 的 Hard Way 手动设置集群)。一切似乎都正常,但我无法访问外部服务。

我可以在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 的虚拟机内部进行 curl 的结果。 能够解决这个问题,请检查下面。

  • 我可以使用 NodePort 从外部访问我的服务。

  • 如果我通过 Nginx-Ingress 公开我的服务,我就可以访问它们。

  • 我使用 Wea​​ve 作为 CNI,日志正常,除了开头的几行关于它无法访问命名空间(RBAC 错误)的日志行。虽然之后日志就很好了。

  • 使用 CoreDNS,日志看起来正常。 APIServer和Kubelet日志看起来正常。 Kubernetes 事件看起来也很正常。

  • 附加说明:我分配的 DNS 服务 IP 是 10.3.0.10 ,服务IP范围为:10.3.0.0/24 ,POD 网络是 10.2.0.0/16 。我不知道什么10.44.x.x是或者它来自哪里。

以下是其中一项服务的输出:

{
  "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
<小时/>

编辑:

原来我没有 kube-dns尽管 CoreDNS 正在运行,但服务由于某种原因仍在运行。正如这里提到的:https://github.com/kubernetes/kubeadm/issues/1056#issuecomment-413235119

现在我可以从虚拟机内部成功 curl ,但代理访问仍然给我同样的错误:No route to host 。我不确定为什么或如何解决这个问题,因为我没有看到 DNS 在这里发挥作用,但无论如何它解决了这个问题。对此有任何可能的解释也将不胜感激。

最佳答案

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

iptables --flush
iptables -tnat --flush
systemctl stop firewalld
systemctl disable firewalld
systemctl restart docker

关于networking - Kubernetes:没有托管路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52619828/

相关文章:

java - 在java中, InetAddress.getLocalHost() 和 InetAddress.getByName ("127.0.0.1"之间有什么区别)

c - 使用哪个 IP Helper API 接口(interface)?

如果我关闭其中一个主节点,Kubernetes 节点将获得状态 "NotReady"

Kubernetes:服务路由到具有多个容器的 Pod

java - UDP Android 应用程序适用于 HTC,但不适用于 Nexus S

java - 使用 Java 将 HTTP post 发送到 Web 服务器

nginx - K8s Ingress服务返回503,在Pod日志中什么也没有

go - 在Go程序中检查Pod是否在k8s集群上运行

kubernetes - Istio 无法将请求路由到具有不同目标端口的工作负载

kubernetes - 多节点集群的网络策略行为