如何使用kubernetes中的负载均衡器服务公开多个端口

Seb*_*ien 12 port load-balancing google-cloud-platform kubernetes

我使用google cloud plateform(容器引擎)创建了一个集群,并使用以下yaml文件部署了一个pod:

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
Run Code Online (Sandbox Code Playgroud)

然后我想创建一个服务,使pod能够监听所有这些端口.我知道他跟随yaml文件工作来创建一个侦听一个端口的服务:

apiVersion: v1
kind: Service
metadata: 
  name: service-name
spec:    
  ports:
  - port: 80
    targetPort: 80
  selector: 
    app: app-label
  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

但是,当我希望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
Run Code Online (Sandbox Code Playgroud)

如何让我的pod收听多个端口?

dan*_*cic 17

您有两种选择:

  1. 您可以拥有多个服务,每个端口一个.正如您所指出的,每项服务最终都会使用不同的IP地址
  2. 您可以拥有多个端口的单个服务.在这种特殊情况下,您必须为所有端口命名.

在您的情况下,该服务变为:

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
Run Code Online (Sandbox Code Playgroud)

这是必要的,以便可以消除端点的歧义.