kubernetesのServiceは内部ネットワークの名前解決機能を提供しています。Serviceのnameに設定に設定した名前はホスト名として機能し、各コンテナからその名前でアクセスできます。
Serviceに到達したリクエストは、selectorとports.targetPortに指定した内容の組み合わせで検索し、マッチした Pod に転送されます。
apiVersion: v1
kind: Service
metadata:
labels:
name: nginx
name: nginx
spec:
ports:
- name: https
port: 443
targetPort: nginx-https
- name: http
port: 80
targetPort: nginx-http
- name: ssh
port: 22
targetPort: ssh
selector:
app: frontend
type: LoadBalancer
targetPortについては、Deploymentなどの設定に記載したポートの名称であるため自明です。
同時に、selector の設定も判定に用いられている点には注意が必要です。
selectorのラベルには、nameやそれ以外の任意のラベルを使用できます。
ServiceとDeploymentの設定でマッチする組み合わせで指定すれば問題はないのですが、意図せず揃っていないと接続拒否されます。
上の設例では、port443と80にWebサーバー、22にsshdを想定しています。
このように転送先に複数のコンテナを指定するケースでは、selectorにはタグのようなラベルを指定した方が管理しやすいでしょう。
selectorにnameを指定すると、Deployment側の設定で複数の異種コンテナに対して重複した name を指定しないと接続できない状況になります。
⁋ 2019/06/18↻ 2024/11/07
中馬崇尋
Chuma Takahiro
Chuma Takahiro