web-dev-qa-db-ja.com

Kubernetesでロードバランサーサービスを使用して複数のポートを公開する方法

Google Cloud Plateform(コンテナエンジン)を使用してクラスターを作成し、次のyamlファイルを使用してポッドをデプロイしました。

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

次に、ポッドがこれらすべてのポートでリッスンできるようにするサービスを作成します。私は彼がyamlファイルをフォローして、1つのポートでリッスンするサービスを作成することを知っています:

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

ただし、ポッドがこのような複数のポートでリッスンするようにしたい場合、機能しません。

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

ポッドに複数のポートをリッスンさせるにはどうすればよいですか?

11
Sebastien

次の2つのオプションがあります。

  1. ポートごとに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

これは、エンドポイントを明確にするために必要です。

16
danielepolencic