将特定容器的端口暴露给外部IP

时间:2018-03-26 20:50:03

标签: kubernetes kubernetes-helm google-kubernetes-engine

我正在部署一个包含三个副本容器的服务的头盔图。我一直关注these directions将服务暴露给外部IP地址。

如何为每个容器或每个pod公开一个端口?我明确地不希望公开将该端口映射到服务中的某些(但任何)pod的负载均衡器。有问题的服务是有状态集的一部分,对于外部的客户来说,三个正在联系的中的哪一个很重要,所以我无法将其抽象出负载平衡器。

2 个答案:

答案 0 :(得分:2)

您需要为有状态集中的每个pod创建一个新服务。要区分豆荚,您需要使用描述here的名称标记豆荚 当您有单独的服务时,您可以在入口中单独使用它们。

答案 1 :(得分:2)

只需添加有关创建服务的官方Kubernetes文档:

https://kubernetes.io/docs/concepts/services-networking/service/

Kubernetes中的服务是一个REST对象,类似于Pod。与所有REST对象一样,可以将服务定义POST到apiserver以创建新实例。例如,假设您有一组Pod,每个Pod都暴露端口9376并带有标签“app = MyApp”。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

此规范将创建一个名为“my-service”的新Service对象,该对象使用“app = MyApp”标签定位任何Pod上的TCP端口9376。此服务还将分配一个IP地址(有时称为“群集IP”),由服务代理使用(见下文)。将连续评估服务的选择器,并将结果发布到名为“my-service”的端点对象。

请注意,服务可以将传入端口映射到任何targetPort。默认情况下,targetPort将设置为与端口字段相同的值。也许更有趣的是,targetPort可以是一个字符串,指的是后端Pods中端口的名称。分配给该名称的实际端口号在每个后端Pod中可以不同。这为部署和发展您的服务提供了很大的灵活性。例如,您可以更改pod在下一版本的后端软件中公开的端口号,而不会破坏客户端。

Kubernetes Services支持协议的TCP和UDP。默认值为TCP。