(五)Pod 端口映射
理解 containerPort
containerPort 用来声明容器提供服务的端口。它不是 Docker 中 -p 主机端口:容器端口 这样的主机端口映射,也不会决定容器中的程序是否真正监听该端口
换句话说,这个端口的作用是 告诉 Kubernetes 这个容器预计会使用这个端口
先删除原本 deployment 中的 nginx,然后创建一个没有声明端口的 nginx
kubectl delete deployment nginx-deployment
kubectl create deployment nginx --image=nginx:latest
kubectl get pods -o wide
curl {nginx_ip}:{port}
可以看到,即使没有声明 containerPort,Nginx 仍然可以通过 Pod IP 的 80 端口访问

kubectl delete deployment nginx
kubectl create deployment nginx --image=nginx:latest --port=9999
kubectl get pods -o wide
curl {nginx_ip}:9999
curl {nginx_ip}:80
可以看到,即使我们主动声明了 port 但依旧无法使用自定的端口进行访问,也就是说,containerPort 的作用只是 告诉 Kubernetes 这个容器预计会使用这个端口,真正使用的端口,是由 nginx 决定的

使用 Service 映射端口
Pod IP 是集群内部地址,不能直接作为集群外的访问地址,这里我们先做一个基础的理解
# 使用 expose 可以创建一个 Service
# 9999 Service 提供服务端口、80 nginx 提供服务的端口
kubectl expose deployment nginx --port=9999 --target-port=80
kubectl get service nginx
curl {nginx_ip}:{port}
# 如果想 Service 和 nginx 都使用相同端口,也是可以实现的
# kubectl expose deployment nginx --port=80
可以看到,访问路径已经成功了
- Service 的 9999 端口 -> Nginx 容器的 80 端口

使用 port-forward 映射本地端口
除了 Service,还可以用 kubectl port-forward 临时把 master 的本地端口转发到 Pod
kubectl get pods
kubectl port-forward nginx-xxx-xxx 999:80
# 再开一个 master 终端
curl 127.0.0.1:999
当 Ctrl + c 退出端口转发后,127.0.0.1:999 就会失效,这个入口只用于临时访问

总结
这章我们初步学习了有关 Pod 端口转发的知识,当然,能记住是最好的,记不住,也留有印象,这也足够了
愿诸君顺遂