Kubernetes deploymentでは、次のようにポートを指定します。
containers:
- name: nginx
image: nginx:latest
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
これでserviceでそのようにそのポートを参照できます(サービスで外部ポートのみを指定できます):
spec:
type: ClusterIP
ports:
- name: nginx-port
port: 80
targetPort: nginx-port
protocol: TCP
質問ですが、次の構文nginx-service.default.svc.cluster.local:nginx-port
を使用して他の場所でサービスとポートを参照できますか?私はこの特別な名前を使用してサービスを参照できることを知っていますが、私はポート番号をnginx-service.default.svc.cluster.local:80
のようにハードコーディングしていることに気づきました。
kube-dns
は、すべての通常のDNSサーバーと同じプロトコルを使用するDNSサービスです。この意味で、DNSは「ポート名」を解決するようには設計されていませんが、ドメイン名(IPアドレスにマップされる)を解決するように設計されています。
複数の人が行うことは、あるポートから別のポートにトラフィックをProxyPassするリバースプロキシを用意することです(ただし、HTTP/HTTPSトラフィックについて話している場合) https://serverfault.com/questions/85078/how-to -forward-dns-alias-to-hostnameport またはiptablesルールを使用 https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway -with-iptables 。ただし、これらは、最初に特定のポート(80など)にトラフィックを転送することを前提としています。
あなたがコメントで書いたように、環境変数を使用することはあなたのケースに合うオプションです。
いいえ。ポート番号の代わりにポート名を使用することはできません。 ServicePortの名前フィールドの目的は異なります。
ServiceSpec内のすべてのポートには一意の名前が必要です。この名前は、EndpointPortオブジェクトの「名前」フィールドにマップされます。
サービスごとに、1つのエンドポイントオブジェクトが生成されます。そのエンドポイントのすべてのポートは、サービスポートに対応しています。この照合には、ServicePortとEndpointPortの両方の名前フィールドが使用されます。