はじめに
KubernetesのLoadBalancerサービスは、クラウドプロバイダーのロードバランサーサービスを利用するのが一般的です。
Kubernetesのマニュアルにはクラウドプロバイダーごとの注意事項などが書かれているのですが、Oracle Cloud Infrastructure(OCI)の項目がありません。
OCIのマニュアルには書かれています。
そこで、今回はOCIのKubernetesサービス(OKE)でLoadBalancerサービスを確認します。
Podの作成
まずはLoadBalancerのエンドポイントになるPodを作成します。
OCIのマニュアルにはマニフェストのサンプルがありますが、LoadBalancerがちゃんと作られることを確認するだけですので、コマンドで簡単に作りたいと思います。
$ kubectl run nginx --image=nginx
pod/nginx created
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 28m 10.244.1.5 10.0.10.181 <none> <none>
LoadBalancerの作成
これもコマンドで簡単に作りたいと思います。
$ kubectl expose pod nginx --port=80 --target-port=80 --name=nginx-lb --type=LoadBalancer
service/nginx-lb exposed
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 32h
nginx-lb LoadBalancer 10.96.230.198 <pending> 80:30537/TCP 13s
作った直後はEXTERNAL-IPがpendingになっています。1, 2分経つとEXTERNAL-IPが割り振られています。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 32h
nginx-lb LoadBalancer 10.96.230.198 129.146.209.97 80:30537/TCP 54s
LoadBalancerのエンドポイントにPodのIPアドレス10.244.1.5が設定されていることを確認します。
$ kubectl describe svc nginx-lb
Name: nginx-lb
Namespace: default
Labels: run=nginx
Annotations: <none>
Selector: run=nginx
Type: LoadBalancer
IP: 10.96.230.198
LoadBalancer Ingress: 129.146.209.97
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 30537/TCP
Endpoints: 10.244.1.5:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 73s service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 29s service-controller Ensured load balancer
ロードバランサがデプロイされていますね。
疎通確認
LoadBalancerのIPアドレスにアクセスして疎通を確認します。
$ curl 129.146.209.97 |grep nginx!
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
削除
削除の動作も確認します。
$ kubectl delete svc nginx-lb
service "nginx-lb" deleted
OCIのコンソールで確認します。
削除済みのアイテムが残らなかったので信ぴょう性が怪しい画像ですが、 kubectl deleteコマンドでOCIのロードバランサリソースも削除されました。

