多くのグーグルと検索(ここでも)の後、私は私の質問に対する決定的な答えを見つけることができません。ですから、ここの誰かが私を正しい方向に向けてくれることを願っています。
すでに機能している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
を作成する方法はありませんか?
私の知る限り、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