将特定容器的端口暴露给外部 IP
Expose port of a specific container to external IP
我正在部署一个由具有三个副本容器的服务组成的 helm chart。我一直在关注 these directions 向外部 IP 地址公开服务。
如何为每个容器或每个 pod 公开一个端口?我明确不想公开将端口映射到服务中某些(但任何)pod 的负载均衡器。有问题的服务是有状态集的一部分,对于外部的客户端来说,联系这三个服务中的哪一个很重要,所以我无法将其抽象到负载均衡器后面。
您需要为有状态集中的每个 pod 创建一个新服务。要区分 pods,您需要用 here
中描述的名称来标记它们
当您有单独的服务时,您可以在入口中单独使用它们。
只需添加有关创建服务的官方 Kubernetes 文档:
https://kubernetes.io/docs/concepts/services-networking/service/
Kubernetes 中的 Service 是一个 REST 对象,类似于 Pod。与所有 REST 对象一样,可以将服务定义发布到 apiserver 以创建新实例。例如,假设您有一组 Pods,每个都公开端口 9376 并带有标签 "app=MyApp".
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
此规范将创建一个名为“my-service”的新服务对象,它以带有 "app=MyApp" 标签的任何 Pod 上的 TCP 端口 9376 为目标。该服务还将分配一个 IP 地址(有时称为“集群 IP”),供服务代理使用(见下文)。服务的选择器将被持续评估,结果将被发布到一个名为“my-service”的端点对象。
请注意,服务可以将传入端口映射到任何目标端口。默认情况下,targetPort 将设置为与端口字段相同的值。或许更有趣的是,targetPort 可以是一个字符串,指的是后端Pods 中端口的名称。分配给该名称的实际端口号在每个后端 Pod 中可能不同。这为部署和发展您的服务提供了很大的灵活性。例如,您可以更改 pods 在后端软件的下一版本中公开的端口号,而不会破坏客户端。
Kubernetes 服务支持 TCP 和 UDP 协议。默认为 TCP。
我正在部署一个由具有三个副本容器的服务组成的 helm chart。我一直在关注 these directions 向外部 IP 地址公开服务。
如何为每个容器或每个 pod 公开一个端口?我明确不想公开将端口映射到服务中某些(但任何)pod 的负载均衡器。有问题的服务是有状态集的一部分,对于外部的客户端来说,联系这三个服务中的哪一个很重要,所以我无法将其抽象到负载均衡器后面。
您需要为有状态集中的每个 pod 创建一个新服务。要区分 pods,您需要用 here
中描述的名称来标记它们
当您有单独的服务时,您可以在入口中单独使用它们。
只需添加有关创建服务的官方 Kubernetes 文档:
https://kubernetes.io/docs/concepts/services-networking/service/
Kubernetes 中的 Service 是一个 REST 对象,类似于 Pod。与所有 REST 对象一样,可以将服务定义发布到 apiserver 以创建新实例。例如,假设您有一组 Pods,每个都公开端口 9376 并带有标签 "app=MyApp".
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
此规范将创建一个名为“my-service”的新服务对象,它以带有 "app=MyApp" 标签的任何 Pod 上的 TCP 端口 9376 为目标。该服务还将分配一个 IP 地址(有时称为“集群 IP”),供服务代理使用(见下文)。服务的选择器将被持续评估,结果将被发布到一个名为“my-service”的端点对象。
请注意,服务可以将传入端口映射到任何目标端口。默认情况下,targetPort 将设置为与端口字段相同的值。或许更有趣的是,targetPort 可以是一个字符串,指的是后端Pods 中端口的名称。分配给该名称的实际端口号在每个后端 Pod 中可能不同。这为部署和发展您的服务提供了很大的灵活性。例如,您可以更改 pods 在后端软件的下一版本中公开的端口号,而不会破坏客户端。
Kubernetes 服务支持 TCP 和 UDP 协议。默认为 TCP。