代码之家  ›  专栏  ›  技术社区  ›  Sebastien

如何在Kubernetes中使用负载平衡器服务公开多端口

  •  36
  • Sebastien  · 技术社区  · 7 年前

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata: 
      name: deployment-name
    spec:
      replicas: 1
      template:
        metadata:
          name: pod-name
          labels: 
            app: app-label
        spec:
          containers: 
          - name: container-name
          image: gcr.io/project-id/image-name
          resources:
            requests:
              cpu: 1
          ports:
          - name: port80
            containerPort: 80
          - name: port443
            containerPort: 443
          - name: port6001
            containerPort: 6001
    

    然后我想创建一个服务,使pod能够侦听所有这些端口。我知道以下YAML文件用于创建在一个端口上侦听的服务:

    apiVersion: v1
    kind: Service
    metadata: 
      name: service-name
    spec:    
      ports:
      - port: 80
        targetPort: 80
      selector: 
        app: app-label
      type: LoadBalancer
    

    但是,当我希望pod在这样的多个端口上侦听时,它不起作用:

    apiVersion: v1
    kind: Service
    metadata: 
      name: service-name
    spec:    
      ports:
      - port: 80
        targetPort: 80
      - port: 443
        targetPort: 443
      - port: 6001
        targetPort: 6001
      selector: 
        app: app-label
      type: LoadBalancer
    

    1 回复  |  直到 4 年前
        1
  •  56
  •   danielepolencic    7 年前

    您有两种选择:

    1. 您可以有多个服务,每个端口一个。正如您所指出的,每个服务将以不同的IP地址结束

    在您的情况下,服务变成:

    apiVersion: v1
    kind: Service
    metadata:
      name: service-name
    spec:
      ports:
      - name: http
        port: 80
        targetPort: 80
      - name: https
        port: 443
        targetPort: 443
      - name: something
        port: 6001
        targetPort: 6001
      selector:
        app: app-label
      type: LoadBalancer