Tob*_*ayn 3 containers kubernetes
我正在尝试学习 Kubernetes。我不明白的一件事是以下场景:
鉴于我有一个带有 2 个容器的 Pod。一个容器运行一个侦听端口 80 的应用程序,另一个容器是一个 sidecar,它从 Web 资源进行一些轮询,但不侦听任何端口。
现在,当我使用 = 80 启动服务时TargetPort,Kubernetes 如何知道 pod 中的哪个容器公开此端口?它是否检查所有容器以检查暴露的端口?或者它只是在Pod 内的所有容器上对端口 80 进行映射?
此外,是否可以更改 Kubernetes 中容器公开的端口,以便容器公开的端口 (= ) 映射到容器内的containerPort不同端口?我的意思是类似Docker 中的-p参数。
Pods的 Kubernetes 概述文档说明:
Pod 中的每个容器共享网络命名空间...在 Pod 中,容器共享 IP 地址和端口空间...
因此,如果一个 Pod 中有多个容器,从该 Pod 外部来看,它们看起来都“相同”,就像您可以在具有单个 IP 地址的单个物理计算机上运行多个服务器进程一样。您不能运行两个在同一个 Pod 中侦听同一端口的容器。入站请求将到达恰好在该端口上侦听的容器(如果有)。
是否可以更改 Kubernetes 中容器公开的端口,以便容器公开的端口 (=containerPort) 映射到容器内的不同端口?
您可以通过您的服务来完成此操作。请记住,您通常不会直接连接到 Pod;而是直接连接到 Pod。相反,您连接到一个服务并将请求转发到匹配的 Pod 之一。所以如果你的 Pod 规范说
containers:
- name: sidecar
# ...
- name: server
ports:
- name: http
containerPort: 8080
Run Code Online (Sandbox Code Playgroud)
那么相应的服务可以说
ports:
- port: 80
targetPort: http
Run Code Online (Sandbox Code Playgroud)
并且您将http://service-name.namespace.svc.cluster.local使用默认的 HTTP 端口 80 进行连接,即使容器进程实际上正在侦听端口 8080 或 3000 或其他端口。
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |