【发布时间】:2021-10-03 15:40:20
【问题描述】:
我按照此处的指南设置了一个 4 节点 Kubernetes 集群:https://www.tecmint.com/install-a-kubernetes-cluster-on-centos-8/
它有一个主节点和三个工作节点。
我正在运行一个名为“hello-world”的部署,该部署基于具有 20 个副本的 bashofmann/rancher-demo 映像。我还创建了一个名为 hello-world 的节点端口服务,它将节点端口 30213 映射到每个 pod 上的端口 8080。
基本细节见下文:
# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/hello-world-655b948488-22dq4 1/1 Running 0 112m
pod/hello-world-655b948488-2fd7f 1/1 Running 0 112m
pod/hello-world-655b948488-2hrtw 1/1 Running 0 112m
pod/hello-world-655b948488-5h4ns 1/1 Running 0 112m
pod/hello-world-655b948488-5zg9w 1/1 Running 0 112m
pod/hello-world-655b948488-7kcsp 1/1 Running 0 112m
pod/hello-world-655b948488-c5m67 1/1 Running 0 112m
pod/hello-world-655b948488-dswcv 1/1 Running 0 112m
pod/hello-world-655b948488-fbtx6 1/1 Running 0 112m
pod/hello-world-655b948488-g7bxp 1/1 Running 0 112m
pod/hello-world-655b948488-gfb4v 1/1 Running 0 112m
pod/hello-world-655b948488-j6lz9 1/1 Running 0 112m
pod/hello-world-655b948488-jthnq 1/1 Running 0 112m
pod/hello-world-655b948488-pm5b8 1/1 Running 0 112m
pod/hello-world-655b948488-qt7gs 1/1 Running 0 112m
pod/hello-world-655b948488-s2hjv 1/1 Running 0 112m
pod/hello-world-655b948488-vcjzz 1/1 Running 0 112m
pod/hello-world-655b948488-vprgn 1/1 Running 0 112m
pod/hello-world-655b948488-x4b9n 1/1 Running 0 112m
pod/hello-world-655b948488-ztfh7 1/1 Running 0 112m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hello-world NodePort 10.110.212.243 <none> 8080:30213/TCP 114m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d2h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-world 20/20 20 20 112m
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-world-655b948488 20 20 20 112m
# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready control-plane,master 2d2h v1.21.3 192.168.188.190 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
k8s-worker1 Ready <none> 2d2h v1.21.3 192.168.188.191 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
k8s-worker2 Ready <none> 2d2h v1.21.3 192.168.188.192 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
k8s-worker3 Ready <none> 2d2h v1.21.3 192.168.188.193 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
我发现集群没有跨三个工作节点进行负载平衡。 如果我打开我的网络浏览器并转到http://192.168.188.191:30213,那么它将加载网站,但只有在 k8s-worker1 上的 pod 提供服务时。同样,如果我转到http://192.168.188.192:30213,那么它会加载网站,但只有在 k8s-worker2 上的 pod 提供服务时才会加载。
这个特定容器/pod 图像的巧妙之处在于,它会在任何给定时间显示哪个 pod 正在为我的网站请求提供服务。该页面会刷新并循环浏览集群中的所有可用 pod。我可以看到,每当页面成功刷新时,它只会由 k8s-worker1 上的 pod 提供服务。它还将显示存在多少副本。我应该看到 20 个,但我最多只能看到 8 个副本。
它永远不会加载任何其他工作节点上的任何 pod 提供的网站。从 k8s-master 我可以发出“curl --insecure http://192.168.188.191:30213" 命令并在大约 33% 的时间得到响应。其余时间它失败了。我相信这是因为它正在尝试对请求进行负载平衡到其他工作节点,但这些请求失败。
由于我对这些东西还很陌生,我不知道该看什么。是不是副本集有问题?
每个工作节点都开启了以下防火墙规则:
# firewall-cmd --list-ports
6443/tcp 2379-2380/tcp 10250/tcp 10251/tcp 10252/tcp 10255/tcp 6783/tcp 6783/udp 6784/udp 443/tcp
我需要打开更多端口吗?我应该打开 3000-32767 的所有端口吗?这似乎是一个可能的安全漏洞。
【问题讨论】:
-
你在服务上设置
externalTrafficPolicy: Local了吗? -
@coderanger "kubectl describe service hello-world" 显示“外部流量策略:集群”
-
@LovedeepSharma 我去 192.168.188.190:30213 时根本没有任何网站。