kindでも"type LoadBalancer"を使いたい! / kubernetes-meetup-tokyo-24-kind-with-type-loadbalancer

Ce4810046c3b25ff4dfce9cac2dbd4dd?s=47 uesyn
October 24, 2019

kindでも"type LoadBalancer"を使いたい! / kubernetes-meetup-tokyo-24-kind-with-type-loadbalancer

Kubernetes Meetup Tokyo #24 の LTで使った資料です。

Ce4810046c3b25ff4dfce9cac2dbd4dd?s=128

uesyn

October 24, 2019
Tweet

Transcript

  1. kindでも ”type LoadBalancer” が使いたい!

  2. Profile 2 上村 真也 • 所属: Z Lab • Twitter: @uesyn

  3. 3

  4. このスライドは個人の見解であり、 所属する組織の公式見解ではありません。 4

  5. 5 kind • DockerコンテナをノードとしてK8sクラスタを作成 ◦ マルチノードの構成も可能 • 詳しくは以下の@amsy810さんの資料を参照 ◦ “Kubernetes

    in Docker で始めるお手軽 Kubernetes 環境” https://speakerdeck.com/masayaaoyama/cloudnativejp-09-kubernetes-in-docker-kind
  6. 6 "type LoadBalancer"なService • LoadBalancerとServiceをいい感じに繋ぐ • それぞれの環境にあった実装がなければ利用できない

  7. 7 • “type LoadBalancer”は利用できない ◦ Cloud Providerの実装やLBのコントローラを持ってないはず … • 設定しないと接続できるのはAPI

    Serverのみ ◦ NodePortへの接続も設定が必要 kindと”type LoadBalancer” kindでも”type LoadBalancer”を使いたい!
  8. “type LoadBalancer”な Serviceへのアクセス 8 “type LoadBalancerを…” 3. MetalLBを利用 4. カスタムコントローラを実装

    1. NodePortとextraPortMappings 2. kubectl port-forward 諦める 諦めない
  9. NodePortとextraPortMappings 9 • ホストとNodeコンテナのPortをマッピング ◦ NodePort経由でPodへ接続できる • Serviceを作るときNodePortを意識する必要 kind: Cluster

    apiVersion: kind.sigs.k8s.io/v1alpha3 nodes: - role: control-plane - role: worker extraPortMappings: - containerPort: 80 hostPort: 80 listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0" protocol: udp # Optional, defaults to tcp 諦める
  10. kubectl port-forward 10 • API Server経由でNode上のPodへ ◦ TCPのみ対応 • Serviceも指定できるが...

    ◦ Service配下のどれか1つのPodへPortForward Pod1 Pod2 Pod3 K8s API Server kubectl port-forward 諦める 例) kubectl port-forward svc/test-service 10000:9000
  11. MetalLBを利用 11 • Linux環境であればMetalLBのL2-modeを使うと"type LoadBalancer"が利用可能 • Docker Desktopではdockerのnetworkに疎通が難しくMetalLBは難しい ◦ https://mauilion.dev/posts/kind-metallb/

    諦めない
  12. 12 Macを使っていても手軽に"type LoadBalancer"が使えないか?

  13. カスタムコントローラを実装した 13 Pod1 Pod2 Pod3 LBPod K8s API Server port-forward

    ClusterIP • Podとして動かしたLBでトラフィックをバランシング ◦ そのLBのPodに対してPortForward ◦ バランシングにはCluster-IPを利用 ◦ kubectl port-forwardと同じくTCPのみ対応 ◦ API Serverにつながれば良いだけ! 諦めない
  14. 実装の概要 14 • コントローラはローカルのコマンドとして実行 LocalLB-controller ・"type LoadBalancer"なServiceをwatch ・上記ServiceのLBPodを作成 ・LBPodへPort-forward LBPod

    kind:Service Spec: type: LoadBalancer K8s API Server Port-Forward ・ServiceをownerReferenceとして持つ ・ServiceがなくなればGCされる ・コントローラを実行 ・"type LoadBalancer"なServiceを作成
  15. 15 デモ • したいけど多分時間ない • 気になる人はあとで個別で見に来てください • ソースコードは後ほど展開します ◦ 現在Private

    Repository ◦ https://github.com/uesyn/k8s-local-loadbalancer
  16. 16 ご静聴ありがとうございました!