Share
Embed
ちょっと大きめのOSSにコントリビュートしかけた話
2023/09/16
小江戸らぐ 9月のオフな集まり(第254回)
世良泰明
概要
kubesprayのバグを見つけ、プルリクエストを投げてみた話。
世良泰明
September 17, 2023
Transcript
22 slides
-
⾃⼰紹介 名前: 世良 泰明 (せら やすあき) 職業: ひよっこインフラエンジニア (3年⽬) 名古屋の某SIer所属
AWSでインフラ基盤の開発・運⽤ twitter: @y_sera15 ⾃宅K8sクラスター (intel nuc 3台) ESXi Master node1 Worker node1 ESXi Master node2 Worker node2 ESXi Master node3 Worker node3 Master 3台, worker 3台のHA構成 CNI: Ciliumを利⽤ -
今⽇の話 kubesprayというkubernetesクラスタ構築ツールでバグを踏んだため、 修正プルリクエストを投げてみました ⽬次 1. きっかけ 2. Kubesprayとは 3. Ciliumとは
4. やろうとしたこと 5. ハマったバグ 6. バグ修正 7. コントリビュートまでの準備 8. プルリクエスト 9. 結果 10.まとめ -
Ciliumとは Kubernetesのネットワークプラグインの1つ - eBPFという機構を⽤いて、効率的なコンテナ間ネットワークを構築 - ciliumの中に、hubbleというネットワーク, セキュリティの可視化ツールも提供 ※eBPF(拡張バークレーパケットフィルター) カーネルに動的にプログラムを埋め込む仕組み. カーネルのイベントをフックして⾃由度の⾼い処理を実装できる.
Hubble UI https://docs.cilium.io/en/latest/get tingstarted/hubble/ -
やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 diff --git a/mycluster/group_vars/k8s_cluster/k8s-cluster.yml b/mycluster/group_vars/k8s_cluster/k8s-cluster.yml index 211a350..a4ae5e1 100644
--- a/mycluster/group_vars/k8s_cluster/k8s-cluster.yml +++ b/mycluster/group_vars/k8s_cluster/k8s-cluster.yml @@ -67,7 +67,7 @@ credentials_dir: "{{ inventory_dir }}/credentials" # Choose network plugin (cilium, calico, kube-ovn, weave or flannel. Use cni for generic cni plugin) # Can also be set to 'cloud', which lets the cloud provider setup appropriate routing -kube_network_plugin: calico +kube_network_plugin: cilium Ciliumの有効化 -
やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 diff --git a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml index a170484..96a493e 100644
--- a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml +++ b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml @@ -52,7 +52,7 @@ # Only effective when monitor aggregation is set to "medium" or higher. # cilium_monitor_aggregation_flags: "all" # Kube Proxy Replacement mode (strict/partial) -# cilium_kube_proxy_replacement: partial +cilium_kube_proxy_replacement: strict # If upgrading from Cilium < 1.5, you may want to override some of these options # to prevent service disruptions. See also: @@ -117,7 +117,7 @@ # IP Masquerade Agent # https://docs.cilium.io/en/stable/concepts/networking/masquerading/ # By default, all packets from a pod destined to an IP address outside of the cilium_native_routing_cidr range are masqueraded -# cilium_ip_masq_agent_enable: false +cilium_ip_masq_agent_enable: true ### A packet sent from a pod to a destination which belongs to any CIDR from the nonMasqueradeCIDRs is not going to be masqueraded # cilium_non_masquerade_cidrs: CiliumでeBPFの有効化(1/2) -
やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 @@ -224,13 +224,13 @@ # cilium_enable_ipv6_masquerade: true
# -- Enable native IP masquerade support in eBPF -# cilium_enable_bpf_masquerade: false +cilium_enable_bpf_masquerade: true # -- Configure whether direct routing mode should route traffic via # host stack (true) or directly and more efficiently out of BPF (false) if # the kernel supports it. The latter has the implication that it will also # bypass netfilter in the host namespace. -# cilium_enable_host_legacy_routing: true +cilium_enable_host_legacy_routing: false CiliumでeBPFの有効化(2/2) -
やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 diff --git a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml index 96a493e..cc6dcd7 100644
--- a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml +++ b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml @@ -140,21 +140,22 @@ cilium_ip_masq_agent_enable: true # Hubble ### Enable Hubble without install -# cilium_enable_hubble: false +cilium_enable_hubble: true ### Enable Hubble Metrics -# cilium_enable_hubble_metrics: false +cilium_enable_hubble_metrics: true ### if cilium_enable_hubble_metrics: true ### Enable Hubble install -# cilium_hubble_install: false +cilium_hubble_install: true ### Enable auto generate certs if cilium_hubble_install: true -# cilium_hubble_tls_generate: false +cilium_hubble_tls_generate: true +#cilium_hubble_tls_generate: false # IP address management mode for v1.9+. # https://docs.cilium.io/en/v1.9/concepts/networking/ipam/ Hubbleの有効化 -
ハマったバグ Ciliumのインストールまではできたものの、hubbleを有効化するとエラーになる 原因: パラメータの条件分岐に伴うテンプレートファイルのインデントのズレ パラメータファイル (yaml) こっちをいじる テンプレートファイル (jinja2) 基本的に触らない
マニフェストファイル (yaml) Kubernetes クラスターへ適⽤ -
ハマったバグ Ciliumのインストールまではできたものの、hubbleを有効化するとエラーになる 原因: パラメータの条件分岐に伴うテンプレートファイルのインデントのズレ パラメータファイル (yaml) こっちをいじる テンプレートファイル (jinja2) 基本的に触らない
マニフェストファイル(yaml) ⽣成 Kubernetes クラスターへ適⽤ ここがおかしい -
ハマったバグ(もうちょい具体的に) Ciliumのインストールまではできたものの、hubbleを有効化するとエラーになる 原因: パラメータの条件分岐に伴うテンプレートファイルのインデントのズレ Kubespray/roles/network_plugin/cilium/templates/hubble/deploy.yml.j2 cilium_hubble_tls_generateパラメータの条件分岐でインデントがずれる 59 {% if cilium_hubble_tls_generate
-%} 60 - mountPath: /var/lib/hubble-relay/tls 61 name: tls 62 readOnly: true 63 {% endif -%} 64 restartPolicy: Always 65 serviceAccount: hubble-relay 58 readOnly: true 59 - mountPath: /var/lib/hubble-relay/tls 60 name: tls 61 readOnly: true 62 restartPolicy: Always 63 serviceAccount: hubble-relay cilium_hubble_tls_generate:trueの場合 条件分岐の次の⾏のインデントがずれる… -
バグ修正 Jinja2テンプレートのインデントがずれないように修正 {% if something %} Aaa {% endif %}
White space controlで制御する https://jinja.palletsprojects.com/en/3.1.x/templates/ {% if something -%} Aaa {% endif -%} {%- if something -%} Aaa {%- endif -%} {% if something +%} Aaa {% endif +%} {%- if something +%} Aaa {%- endif +%} などなど {% %}の前後に”-”もしくは”+”を記述することで前後の空⽩を制御 → 挙動がよくわからないので総当たりで調査 ⇨ 解決!! -
プルリクエスト作成 作業の流れ 1. ⾃分のアカウントでkubesprayリポジトリをfork 2. ⾃分のローカルでブランチ作成/コミット 3. ⾃分のリモートリポジトリへpush 4. Githubからプルリクエスト作成
- プルリクエスト作成⽤のコメントはテンプレートが⽤意されているので、 それをいい感じに加⼯ - プルリクエスト作成すると、⾃動でCIテストが⾛る - CIテスト後, 2⼈以上のレビュアーから承認を受ければマージできるらしい -
プルリクエスト作成 可読性の観点で、レビュアーから指摘 {%- if something +%} Aaa {%- endif +%}
+%}じゃなくて、 -%}で⼗分では?(意訳) -
まとめ Kubernetesクラスター構築ツールのkubesprayにバグ修正プルリクエストを投げてみた - Kubernetes-sigs配下のプロジェクトはプルリクエスト前にCLAの署名が必要 - 割としょうもないバグも埋もれてたりする - 作ったプルリクエストは最後まで責任を持つ(放置すると他のプルリクが採⽤されるかも) 所感 -
意外としょーもないバグが混⼊してたりする - リリースバージョンではなく、直接マスターブランチの内容を使ってたから遭遇したのかも。。。 今後 他にもドキュメントでもう少し説明が欲しいところがあったので、 気が向いたら再度プルリクチャレンジしてみる