我会很感激我的项目的一些帮助。
我在 2 个远程服务器上创建了一个 Kubernetes Master-Worker 集群,它们都具有公共 IP。
我希望能够在我的本地机器上添加一个指向主节点 IP 的 DNS 条目,并接收来自虚拟 nginx 应用程序的响应。
这是我到目前为止所拥有的:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP
master-node Ready control-plane,master 6d21h v1.21.0 PUBLIC_IP_MASTER <none>
worker-node Ready <none> 6d21h v1.21.0 PUBLIC_IP_WORKER <none>
命名空间:
NAME STATUS AGE
default Active 6d21h
ingress-nginx Active 173m
kube-node-lease Active 6d21h
kube-public Active 6d21h
kube-system Active 6d21h
metallb-system Active 4d
test Active 61m
Metallb configMap 使用 IP 10.244.0.101-10.244.0.110
托管 hello-world 应用程序的测试命名空间从 MetalLB 获取 IP 并公开端口 8080:
NAME READY STATUS RESTARTS AGE
pod/hello-world-6df5659cb7-9dsnv 1/1 Running 0 60m
pod/hello-world-6df5659cb7-ck9tm 1/1 Running 0 60m
pod/hello-world-6df5659cb7-dfmw4 1/1 Running 0 60m
pod/hello-world-6df5659cb7-n2t6j 1/1 Running 0 60m
pod/hello-world-6df5659cb7-rm79h 1/1 Running 0 60m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-service LoadBalancer 10.98.97.75 10.244.0.102 8080:31647/TCP 18m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-world 5/5 5 5 60m
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-world-6df5659cb7 5 5 5 60m
测试入口将 dashboard.com 指向与测试相关的服务。即使我尝试将 ServicePort 设置为 8080,端口也是 80:
test nginx <none> dashboard.com 144.76.82.244 80 54m
nginx 入口控制器也有一个由 MetalLB 分配的 IP:
pod/ingress-nginx-controller-7fcdd96bcf-vfhbp 1/1 Running 0 174m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller LoadBalancer 10.110.42.108 10.244.0.101 80:31440/TCP,443:30912/TCP 174m
service/ingress-nginx-controller-admission ClusterIP 10.111.168.247 <none> 443/TCP 174m
此时,如果我从 Master 或 Worker 卷曲,我会得到响应:
curl 10.244.0.102:8080
Hello Kubernetes!
如果我将 10.244.0.102 dashboard.com 添加到主节点上的主机文件中,我会再次收到响应:
curl dashboard.com:8080
Hello Kubernetes!
但是,如果我在本地计算机上键入dashboard.com:8080,并在/etc/hosts 中有一个将MASTER_IP 指向dashboard.com 的条目,我会超时。
我可以从主节点中的 netstat 看到没有服务正在侦听 80 或 8080,所以我错过了哪一步?
我的思维过程错了吗?我认为如果我在我的主 IP 上指向一个新域,则设置将根据入口规则上存在的域路由相关服务上的流量。
提前感谢您提供任何提示/阅读材料。