我已经使用Google云平台(容器引擎)创建了一个集群,并使用以下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
然后,我想创建一个使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
如何使我的Pod监听多个端口?

最佳答案

您有两种选择:

  • 您可以有多个服务,每个端口一个。正如您所指出的,每个服务将以不同的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
    

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

    10-08 08:36
    查看更多