首页 文章

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

提问于
浏览
0

为了将服务暴露给外部IP地址,我一直在关注these directions .

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

2 回答

  • 2

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

  • 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”的Endpoints对象 .

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

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

相关问题