kubernetes Service-03 从集群外访问Pod或者Service

💡 原文中文,约4100字,阅读约需10分钟。
📝

内容提要

本文介绍了通过设置容器等级的hostPort和Pod等级的hostNetwork,将Pod和Service的端口号映射到宿主机,以便外部客户端能够访问这些服务。同时还介绍了将Service映射到物理机上,并通过宿主机端口访问服务的方法。

🔎

延伸解读

hostPort 与 hostNetwork 的适用场景

hostPort 将容器端口映射到宿主机,适合需要从集群外直接访问单个 Pod 的场景,但 Pod 漂移后宿主机 IP 会变化。hostNetwork 让 Pod 共享宿主机网络命名空间,所有容器端口直接暴露在物理机上,适合网络性能敏感或需要固定端口的应用,但会占用宿主机端口,且 Pod 调度时需考虑端口冲突。

NodePort 服务的访问方式与限制

NodePort 通过在每个节点上开放一个静态端口(如 30660)来暴露 Service,外部客户端可通过任意节点的 IP 和该端口访问服务。但 NodePort 端口范围通常有限(默认 30000-32767),且直接暴露节点端口可能带来安全风险,生产环境建议配合负载均衡器或 Ingress 使用。

访问测试返回 404 的说明

文中通过宿主机 IP 和端口访问 Tomcat 服务时返回 HTTP 404,这表示网络映射已生效,请求已到达 Tomcat,但请求的路径没有对应的资源。这验证了端口映射配置正确,实际使用时需确保访问的 URL 路径与容器内应用提供的路径一致。

❓

Q&A

如何让外部客户端访问Kubernetes中的Pod和Service?

可以通过设置容器的hostPort和Pod的hostNetwork,将Pod和Service的端口映射到宿主机,从而使外部客户端能够访问这些服务。

什么是hostPort和hostNetwork?

hostPort是将容器端口映射到宿主机的端口,而hostNetwork是将Pod的网络直接映射到宿主机的网络。

如何创建一个使用hostPort的Pod?

可以在Pod的配置中指定containerPort和hostPort,例如将containerPort设置为8080,hostPort设置为8081。

如何通过宿主机访问Pod的服务?

通过宿主机的IP和映射的端口(如8081)可以访问Pod的容器服务。

如何将Service映射到物理机?

可以通过创建Service并设置其类型为NodePort,同时指定nodePort来将Service映射到物理机。

在设置hostNetwork为true时需要注意什么?

在hostNetwork为true时,容器的hostPort默认等于containerPort,若指定hostPort,则必须等于containerPort的值。

🏷️

标签

➡️

继续阅读