Kubernetes Meetup Tokyo #24 の LTで使った資料です。
kindでも”type LoadBalancer”が使いたい!
View Slide
Profile2上村 真也● 所属: Z Lab● Twitter: @uesyn
3
このスライドは個人の見解であり、所属する組織の公式見解ではありません。4
5kind● DockerコンテナをノードとしてK8sクラスタを作成○ マルチノードの構成も可能● 詳しくは以下の@amsy810さんの資料を参照○ “Kubernetes in Docker で始めるお手軽 Kubernetes 環境”https://speakerdeck.com/masayaaoyama/cloudnativejp-09-kubernetes-in-docker-kind
6"type LoadBalancer"なService● LoadBalancerとServiceをいい感じに繋ぐ● それぞれの環境にあった実装がなければ利用できない
7● “type LoadBalancer”は利用できない○ Cloud Providerの実装やLBのコントローラを持ってないはず …● 設定しないと接続できるのはAPI Serverのみ○ NodePortへの接続も設定が必要kindと”type LoadBalancer”kindでも”type LoadBalancer”を使いたい!
“type LoadBalancer”なServiceへのアクセス8“type LoadBalancerを…”3. MetalLBを利用4. カスタムコントローラを実装1. NodePortとextraPortMappings2. kubectl port-forward諦める 諦めない
NodePortとextraPortMappings9● ホストとNodeコンテナのPortをマッピング○ NodePort経由でPodへ接続できる● Serviceを作るときNodePortを意識する必要kind: ClusterapiVersion:kind.sigs.k8s.io/v1alpha3nodes:- role: control-plane- role: workerextraPortMappings:- containerPort: 80hostPort: 80listenAddress: "0.0.0.0" #Optional, defaults to "0.0.0.0"protocol: udp # Optional,defaults to tcp諦める
kubectl port-forward10● API Server経由でNode上のPodへ○ TCPのみ対応● Serviceも指定できるが...○ Service配下のどれか1つのPodへPortForwardPod1Pod2Pod3K8s API Serverkubectl port-forward諦める例) kubectl port-forward svc/test-service 10000:9000
MetalLBを利用11● Linux環境であればMetalLBのL2-modeを使うと"type LoadBalancer"が利用可能● Docker Desktopではdockerのnetworkに疎通が難しくMetalLBは難しい○ https://mauilion.dev/posts/kind-metallb/諦めない
12Macを使っていても手軽に"type LoadBalancer"が使えないか?
カスタムコントローラを実装した13Pod1Pod2Pod3LBPodK8s APIServerport-forwardClusterIP● Podとして動かしたLBでトラフィックをバランシング○ そのLBのPodに対してPortForward○ バランシングにはCluster-IPを利用○ kubectl port-forwardと同じくTCPのみ対応○ API Serverにつながれば良いだけ!諦めない
実装の概要14● コントローラはローカルのコマンドとして実行LocalLB-controller・"type LoadBalancer"なServiceをwatch・上記ServiceのLBPodを作成・LBPodへPort-forwardLBPodkind:ServiceSpec:type: LoadBalancerK8s APIServerPort-Forward・ServiceをownerReferenceとして持つ・ServiceがなくなればGCされる・コントローラを実行・"type LoadBalancer"なServiceを作成
15デモ● したいけど多分時間ない● 気になる人はあとで個別で見に来てください● ソースコードは後ほど展開します○ 現在Private Repository○ https://github.com/uesyn/k8s-local-loadbalancer
16ご静聴ありがとうございました!