Serviceとは何か
Service(サービス)は、入れ替わるPodの前に置く、変わらない名前と入口です。クラスタの中のほかのPodは、PodのIPアドレスでなく、Serviceの名前で呼べます。
Podは作り直されるたびに、IPアドレスが変わります。注文アプリが厨房アプリを呼ぶのに、毎回変わる住所は使えません。
このレッスンのゴール
メモ
Serviceを作り、別のPodから名前で呼べる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| Service | Podの前に置く、変わらない名前と入口 | |
| セレクタ | Serviceが送り先のPodを選ぶ、ラベルの条件 | app=kitchen |
| ClusterIP | Serviceに付く、クラスタの中だけの住所 | |
| クラスタDNS | Serviceの名前を住所に直す、クラスタの電話帳 | |
| targetPort | Podの中で、アプリが待っているポート | 8080 |
| EndpointSlice | Serviceが今送っている、Podの住所の一覧 |
学生が入力するセルは、このプレビューでは空白です。
Serviceはラベルで送り先を選ぶ
Serviceには、ポート番号とセレクタを書きます。セレクタは、ラベルの条件です。条件に合うPodが、送り先になります。
Podが増えても減っても、Serviceは条件に合うPodを選び直します。名前と入口は、そのまま変わりません。
名前空間を作る
kubectl create namespace cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
厨房アプリを2つ動かす
kubectl create deployment kitchen --image=busybox:1.37.0 --replicas=2 -n cafe -- sh -c 'mkdir -p /www; echo hello from kitchen > /www/index.html; httpd -f -p 8080 -h /www'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
全部動くまで待つ
kubectl rollout status deployment/kitchen -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Serviceを作る
kubectl expose deployment kitchen --port=80 --target-port=8080 -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Serviceを読む
kubectl get service kitchen -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
セレクタだけを読む
kubectl get service kitchen -n cafe -o jsonpath='{.spec.selector}'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
送り先の一覧
kubectl get endpointslices -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
クラスタDNSが名前を住所に直す
クラスタの中には、DNSがあります。Serviceの名前を、ClusterIPに直す電話帳です。
同じ名前空間なら kitchen で届きます。別の名前空間からは kitchen.cafe のように、名前空間まで書きます。全部書くと kitchen.cafe.svc.cluster.local です。
Serviceの名前の書き方
| 書き方 | どこから届くか | 例 |
|---|---|---|
| kitchen | 同じ名前空間のPodから | cafe の中から |
| kitchen.cafe | どの名前空間のPodからも | default の中から |
| kitchen.cafe.svc.cluster.local | どこからも。全部を書いた名前 | どの名前空間でも |
学生が入力するセルは、このプレビューでは空白です。
試すPodを1つ作って呼ぶ
kubectl run に --rm -i --restart=Never を付けると、試すPodを1つ動かして、終わると消えます。始めに、記録についての案内が2行出ることがあります。
wget -qO- は、ページの中身をそのまま表示します。厨房アプリは、hello from kitchen と答えます。
短い名前で呼ぶ
kubectl run probe -n cafe --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchenここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
全部書いた名前で呼ぶ
kubectl run probe -n cafe --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchen.cafe.svc.cluster.localここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
別の名前空間から呼ぶ
kubectl run probe -n default --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchen.cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
別の名前空間から短い名前
kubectl run probe -n default --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchenここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
Serviceを作ったので、Podに届くと思いがちです。セレクタに合うPodが1つもなければ、Serviceはあっても送り先がありません。作ったあとは、必ずEndpointSliceに住所が並んでいるかを見ます。
送り先のないServiceを作る
kubectl create service clusterip lost --tcp=80:8080 -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
送り先の一覧をもう一度
kubectl get endpointslices -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
名前空間を片づける
kubectl delete namespace cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。