【问题标题】:Kubernetes Ingress - Second Node Port is not respondingKubernetes 入口 - 第二个节点端口没有响应
【发布时间】:2021-04-26 10:11:44
【问题描述】:

我正在本地运行 K8S 集群(云中没有任何内容),其中包含一个 K8S 主节点和两个工作节点。

  • k8s-master : 192.168.100.100
  • worker-node-1 : 192.168.100.101
  • worker-node-2 : 192.168.100.102

我使用 kubernetes / ingress-nginx 将流量路由到我的简单应用程序。 这些是我在两个工作节点上运行的 pod:

[root@k8s-master ingress]# kubectl get pods -A -o wide
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE   IP                NODE            NOMINATED NODE   READINESS GATES
default                hello-685445b9db-b7nql                       1/1     Running   0          44m   10.5.2.7          worker-node-2   <none>           <none>
default                hello-685445b9db-ckndn                       1/1     Running   0          44m   10.5.2.6          worker-node-2   <none>           <none>
default                hello-685445b9db-vd6h2                       1/1     Running   0          44m   10.5.1.18         worker-node-1   <none>           <none>
default                ingress-nginx-controller-56c75d774d-p7whv    1/1     Running   1          30h   10.5.1.14         worker-node-1   <none>           <none>
kube-system            coredns-74ff55c5b-s8zss                      1/1     Running   12         16d   10.5.0.27         k8s-master      <none>           <none>
kube-system            coredns-74ff55c5b-w6rsh                      1/1     Running   12         16d   10.5.0.26         k8s-master      <none>           <none>
kube-system            etcd-k8s-master                              1/1     Running   12         16d   192.168.100.100   k8s-master      <none>           <none>
kube-system            kube-apiserver-k8s-master                    1/1     Running   12         16d   192.168.100.100   k8s-master      <none>           <none>
kube-system            kube-controller-manager-k8s-master           1/1     Running   14         16d   192.168.100.100   k8s-master      <none>           <none>
kube-system            kube-flannel-ds-76mt8                        1/1     Running   1          30h   192.168.100.102   worker-node-2   <none>           <none>
kube-system            kube-flannel-ds-bfnjw                        1/1     Running   10         16d   192.168.100.101   worker-node-1   <none>           <none>
kube-system            kube-flannel-ds-krgzg                        1/1     Running   13         16d   192.168.100.100   k8s-master      <none>           <none>
kube-system            kube-proxy-6bq6n                             1/1     Running   1          30h   192.168.100.102   worker-node-2   <none>           <none>
kube-system            kube-proxy-df8fn                             1/1     Running   13         16d   192.168.100.100   k8s-master      <none>           <none>
kube-system            kube-proxy-z8q2z                             1/1     Running   10         16d   192.168.100.101   worker-node-1   <none>           <none>
kube-system            kube-scheduler-k8s-master                    1/1     Running   12         16d   192.168.100.100   k8s-master      <none>           <none>
kubernetes-dashboard   dashboard-metrics-scraper-799cd98cf6-zh8xs   1/1     Running   9          16d   192.168.100.101   worker-node-1   <none>           <none>
kubernetes-dashboard   kubernetes-dashboard-74d688b6bc-hvxgm        1/1     Running   10         16d   10.5.1.17         worker-node-1   <none>           <none>

这些是在我的集群上运行的服务:

[root@k8s-master ingress]# kubectl get svc
NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
hello                                NodePort    10.105.236.241   <none>        80:31999/TCP                 30h
ingress-nginx-controller             NodePort    10.110.141.41    <none>        80:30428/TCP,443:32682/TCP   30h
ingress-nginx-controller-admission   ClusterIP   10.109.15.31     <none>        443/TCP                      30h
kubernetes                           ClusterIP   10.96.0.1        <none>        443/TCP                      16d

这是入口描述:

[root@k8s-master ingress]# kubectl describe  ingress ingress-hello
Name:             ingress-hello
Namespace:        default
Address:          10.110.141.41
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /hello   hello:80 (10.5.1.18:80,10.5.2.6:80,10.5.2.7:80)
Annotations:  kubernetes.io/ingress.class: nginx
              nginx.ingress.kubernetes.io/rewrite-target: /

问题是通过访问worker-node-1 IP地址访问第一个节点时,入口控制器端口= 30428http://192.168.100.101:30428,它工作正常,没有问题。 通过访问具有相同入口端口 30428 的 IP 来访问 worker-node-2 时,它的 NOT RESPONDING 从节点外部以及通过访问 URL 也从节点内部访问: http://192.168.100.102:30428 。 我也尝试执行 telnet 命令(在工作节点 2 内),也没有运气:

[root@worker-node-2 ~]# telnet 192.168.100.102 30428
Trying 192.168.100.102...

最有趣的是端口显示在 netstat 命令中,因为我从 Node-2 内部执行此命令,显示入口端口:30428 处于 LISTEN 状态:

[root@worker-node-2 ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      1284/kubelet
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      2578/kube-proxy
tcp        0      0 0.0.0.0:32682           0.0.0.0:*               LISTEN      2578/kube-proxy
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1856/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1020/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1016/cupsd
tcp        0      0 127.0.0.1:41561         0.0.0.0:*               LISTEN      1284/kubelet
tcp        0      0 0.0.0.0:30428           0.0.0.0:*               LISTEN      2578/kube-proxy
tcp        0      0 0.0.0.0:31999           0.0.0.0:*               LISTEN      2578/kube-proxy
tcp6       0      0 :::10250                :::*                    LISTEN      1284/kubelet
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::10256                :::*                    LISTEN      2578/kube-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      1020/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      1016/cupsd
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           929/avahi-daemon: r
udp        0      0 0.0.0.0:44997           0.0.0.0:*                           929/avahi-daemon: r
udp        0      0 192.168.122.1:53        0.0.0.0:*                           1856/dnsmasq
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1856/dnsmasq
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd

根据我的理解,所有工作节点都必须为“入口控制器”端口暴露 NodePort which=30428??

已编辑: 我发现 "ingress-nginx-controller-56c75d774d-p7whv" 仅部署在 node-1 上。 我是否需要确保 ingress-nginx 控制器在所有节点上运行?如果这句话是真的,如何做到这一点?

【问题讨论】:

  • 你的节点在什么操作系统上运行?您可以尝试执行到例如在 worker-node-1 上运行的 pod 并尝试访问在 worker-node-2 上运行的 pod 吗?
  • 我使用了“Centos 8”,3 个 Hyper V 虚拟机(1 个主节点,2 个节点)。是的,我尝试从一个 pod 运行 exec(在 node1 上运行并尝试 ping 另一个位于节点 2 上的 pod),它无法访问。然后,我厌倦了 ping 同一 node1 上的另一个 pod,很好,我到达了。
  • 这是我怀疑的。这是所有相关的centos8 从iptables 切换到nftables。将您的 CNI 切换到 calico 可能是解决方案,因为他们通过设置 ELIX_IPTABLESBACKEND=NFT 为 nft 提供 added support。这将告诉 calico 使用 nftables 后端
  • 感谢您的回复,是的,我目前正在使用法兰绒。所以,我会换成 calico 试试看。
  • 感谢 @thomas 的 cmets,通过设置您提到的新环境,我设法将 CNI 切换到 calico,所有节点现在都可以顺利相互通信。

标签: kubernetes kubernetes-ingress


【解决方案1】:

Kubernetes 网络(更具体地说是 kube-proxy)使用 iptables 来控制 pod 和节点之间的网络连接。由于 Centos 8 使用 nftables 而不是 iptables 这会导致网络问题。

v.3.8.1+ 中的 Calico 支持在 NFT 模式下使用 iptables 的主机。 解决方案是设置FELIX_IPTABLESBACKEND=NFT 选项。这将告诉 Calico 使用 nftables 支持。

此参数控制 iptables 二进制 Felix 使用的变体。 将此设置为 Auto 以自动检测后端。如果一个特定的 需要后端,然后对使用 netfilter 后端的主机使用 NFTLegacy 其他人。 [默认:Legacy]

请访问此印花布页面以查看如何configure felix。 更多阅读请访问this github issues

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 2023-03-26
    • 2022-07-08
    • 2021-05-27
    • 1970-01-01
    • 2017-07-12
    • 2020-07-02
    • 2020-09-25
    • 2021-01-27
    相关资源
    最近更新 更多