web-dev-qa-db-ja.com

Kubernetesは同じパスの複数のポートを入力します

多くのグーグルと検索(ここでも)の後、私は私の質問に対する決定的な答えを見つけることができません。ですから、ここの誰かが私を正しい方向に向けてくれることを願っています。

すでに機能しているKubeサービス定義がありますが、今はLoadBalancerだけで公開しています。これが私の現在のサービスyamlです:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: namespace1
  labels:
    app: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-service
    tier: web
  ports:
  - name: proxy-port
    port: 8080
    targetPort: 8080
  - name: metrics-port
    port: 8082
    targetPort: 8082
  - name: admin-port
    port: 8092
    targetPort: 8092
  - name: grpc-port
    port: 50051
    targetPort: 50051

これは明らかにTCP負荷分散です。私がやりたいのは相互TLSでこれを保護することです。これにより、サーバーは許可された証明書を使用してクライアントからの接続のみを受け入れます。

久部の土地で言えることは、Ingressの定義です。私はkind:Ingressで見つけることができるすべてのドキュメントを調査してきましたが、同じ上に複数のポートがある)で単一のIngressを作成できるものが見つからないようです。パス!

ここで何かが足りませんか?上記のサービス定義と同じ機能を持つK8sIngressを作成する方法はありませんか?

4
Jacomoman

私の知る限り、Ingressコントローラー(NGINX HTTP(S)プロキシなど)でバックアップされたHTTPS LoadBalancerにカスタムポート(8080など)を使用することはできません。現在、Ingressのポートは公式として暗黙的にhttpでは:80、httpsでは:443です。 ドキュメントリファレンス IngressRuleの説明。

回避策は、次のIngressリソースの例のように、サービスごとに異なるホストを使用することだと思います。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: name-virtual-Host-ingress
spec:
  rules:
  - Host: proxy.foo.com
    http:
      paths:
      - backend:
          serviceName: proxy-svc
          servicePort: 8080
  - Host: metrics.foo.com
    http:
      paths:
      - backend:
          serviceName: metrics-svc
          servicePort: 8082
  - Host: admin.foo.com
    http:
      paths:
      - backend:
          serviceName: admin-svc
          servicePort: 8092
  - Host: grpc.foo.com
    http:
      paths:
      - backend:
          serviceName: grpc-svc
          servicePort: 50051
1
Nepomucen