电脑知识铺
第二套高阶模板 · 更大气的阅读体验

Kubernetes部署端口映射:从容器到外部访问的桥梁

发布时间:2025-12-13 11:00:25 阅读:144 次

为什么需要ref="/tag/851/" style="color:#874873;font-weight:bold;">端口映射?

在本地开发时,你可能习惯直接用浏览器访问 localhost:8080 查看网页。但把应用扔进 Kubernetes 后,发现根本打不开——因为 Pod 跑在集群内部网络里,外界根本连不上。这时候就得靠端口映射,把集群内的服务“暴露”出去。

Service 是怎么玩转端口映射的

Kubernetes 里不叫端口映射,而是通过 Service 来实现。它就像一个“转发规则”,告诉系统:外面来的请求走哪个端口,该转给哪个 Pod。

最常见的类型是 NodePort。比如你部署了一个 Nginx 容器监听 80 端口,想让外网能访问,就可以创建一个 NodePort 类型的 Service,把节点的 30080 映射到 Pod 的 80。

apiVersion: v1
kind: Service
metadata:
name: my-nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080

这样一来,只要访问任意一台节点的 IP 加上 30080 端口,就能看到 Nginx 的欢迎页。就像你在小区门口开了个快递柜,外面的人不用进楼,也能把东西递进去。

ClusterIP:内部专用通道

如果你的服务只打算在集群内部调用,比如订单服务调用用户服务,那就用 ClusterIP。它不会对外暴露,只在集群内有一个虚拟 IP 可以通信。这种就像公司内网系统,只有员工才能访问。

LoadBalancer:云平台自动搞定入口

如果你用的是阿里云、腾讯云这类平台,可以直接上 LoadBalancer 类型。创建后云厂商会自动给你配一个公网 IP 或域名,背后还带着负载均衡器。适合正式上线的应用,比如官网、小程序后台。

Ingress:更灵活的 HTTP 路由控制

当你有多个服务共用 80 和 443 端口时,比如 blog.example.com 走博客,api.example.com 走接口,NodePort 就不够用了。这时候上 Ingress,它可以按域名或路径分发请求,相当于一个智能门卫。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: blog.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: blog-service
port:
number: 80

配上对应的 Ingress Controller(比如 Nginx Ingress),就能实现基于域名的访问分流。

别忘了防火墙和安全组

就算 Service 配好了,也得检查节点所在机器的防火墙是否放行了对应端口。比如云服务器的安全组没开 30080,外面照样访问不了。这就像装了快递柜,但物业不让快递员进门。

调试小技巧

遇到访问不通,先用 kubectl get svc 看看端口对不对,再查 pod 是否正常运行。可以用 kubectl describe svc <service-name> 查事件记录,经常能发现“找不到 Pod”这类提示。也可以在节点上用 curl 测试本地连通性,一步步缩小问题范围。