|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
ネットワークサービス
このページでは、CoreDNS、Traefik Ingressコントローラー、Network Policyコントローラー、およびServiceLBロードバランサーコントローラーがK3s内でどのように機能するかを説明します。
Flannelの設定オプションとバックエンドの選択、または独自のCNIを設定する方法については、Installation Network Optionsページを参照してください。
K3sのために開放する必要があるポートに関する情報は、Networking Requirementsを参照してください。
CoreDNS
CoreDNSは、サーバーの起動時に自動的にデプロイされます。これを無効にするには、クラスター内のすべてのサーバーを`--disable=coredns`オプションで設定してください。
CoreDNSをインストールしない場合は、自分でクラスターDNSプロバイダーをインストールする必要があります。
Traefik Ingress Controller
Traefikは、マイクロサービスを簡単にデプロイするために作られた現代的なHTTPリバースプロキシおよびロードバランサーです。アプリケーションの設計、デプロイ、および実行中のネットワークの複雑さを簡素化します。
Traefik Ingressコントローラーは、ポート80と443を使用するLoadBalancerサービスをデプロイし、管理するIngressリソースのステータスにLoadBalancerサービスの外部IPを表示します。
デフォルトでは、ServiceLBはクラスター内のすべてのノードを使用してTraefik LoadBalancerサービスをホストします。つまり、ポート80と443は他のHostPortまたはNodePortポッドで使用できず、IngressリソースのステータスにはすべてのクラスターのメンバーのノードIPが表示されます。
Traefikによって使用されるノードを制限し、さらにIngressステータスに表示されるノードIPを制限するには、以下のControlling ServiceLB Node Selectionセクションの指示に従い、ServiceLBが実行されるノードを限定するか、いくつかのノードをLoadBalancerプールに追加し、Traefik HelmChartConfigで一致するラベルを設定してそのプールにTraefikサービスを限定してください。
Traefikは、サーバーを起動するときにデフォルトでデプロイされます。デフォルトのチャート値は`/var/lib/rancher/k3s/server/manifests/traefik.yaml`にありますが、このファイルは手動で編集しないでください。K3sは起動時にデフォルトでファイルを置き換えます。代わりに、`/var/lib/rancher/k3s/server/manifests`に追加の`HelmChartConfig`マニフェストを作成してTraefikをカスタマイズする必要があります。詳細と例については、Customizing Packaged Components with HelmChartConfigを参照してください。可能な設定値に関する詳細情報は、K3sのバージョンに含まれるhttps://github.com/k3s-io/k3s-charts/tree/main/charts/traefik[Traefik Helm Chart]の`values.yaml`を参照してください。
クラスターからTraefikを削除するには、すべてのサーバーを`--disable=traefik`フラグで起動してください。詳細については、パッケージコンポーネントの管理を参照してください。
K3sに含まれるTraefikの特定のバージョンの詳細については、あなたのバージョンのリリースノートを参照してください。
-
1.32以降のK3sバージョンには、Traefik v3が含まれています。Traefik v2の既存のインストールは、K3sがアップグレードされると自動的にv3にアップグレードされます。 Traefik v3はv2の設定と互換性があるはずです。詳細については、上流のhttps://doc.traefik.io/traefik/migrate/v2-to-v3/[v2からv3への移行]ドキュメントを参照してください。
-
K3sバージョン1.21から1.31には、Traefik v2が含まれています。ただし、Traefik v1の既存のインストールが見つかった場合、Traefikはv2にアップグレードされていません。
-
K3sバージョン1.20およびそれ以前には、Traefik v1が含まれています。
ネットワークポリシーコントローラー
K3sには、組み込みのネットワークポリシーコントローラーが含まれています。基盤となる実装は、https://github.com/cloudnativelabs/kube-router[kube-routerの]ネットポリシーコントローラーライブラリ(他のkube-router機能は存在しません)であり、https://github.com/k3s-io/k3s/tree/main/pkg/agent/netpol[こちら]で見つけることができます。
これを無効にするには、各サーバーを`--disable-network-policy`フラグで起動してください。
|
K3sの設定がネットワークポリシーコントローラーを無効にするように変更されても、ネットワークポリシーiptablesルールは削除されません。ネットワークポリシーコントローラーを無効にした後に設定されたkube-routerネットワークポリシールールをクリーンアップするには、`k3s-killall.sh`スクリプトを使用するか、`iptables-save`と`iptables-restore`を使用してクリーンアップしてください。これらの手順は、クラスター内のすべてのノードで手動で実行する必要があります。 iptables-save | grep -v KUBE-ROUTER | iptables-restore ip6tables-save | grep -v KUBE-ROUTER | ip6tables-restore |
サービスロードバランサー
任意のLoadBalancerコントローラーをあなたのK3sクラスターにデプロイできます。デフォルトでは、K3sは利用可能なホストポートを使用するhttps://github.com/k3s-io/klipper-lb[ServiceLB](以前のKlipper LoadBalancer)として知られるロードバランサーを提供します。
アップストリームのKubernetesでは、LoadBalancerタイプのサービスを作成することができますが、デフォルトのロードバランサー実装は含まれていないため、これらのサービスは1つがインストールされるまで`pending`のままになります。多くのホスティングサービスは、外部ロードバランサー実装を提供するために、Amazon EC2やMicrosoft Azureなどのクラウドプロバイダーを必要とします。対照的に、K3sのServiceLBは、クラウドプロバイダーや追加の設定なしでLoadBalancerサービスを使用することを可能にします。
ServiceLBの動作
ServiceLBコントローラーは、https://kubernetes.io/docs/concepts/services-networking/service/[Services]の`spec.type`フィールドが`LoadBalancer`に設定されているKubernetesを監視します。
各LoadBalancerサービスに対して、DaemonSetが`kube-system`ネームスペースに作成されます。このDaemonSetは、各ノードに`svc-`プレフィックスを持つServiceLBポッドを作成します。これらのポッドは、サービスポートを使用してhostPortを活用するため、そのポートが利用可能なノードにのみデプロイされます。そのポートが利用可能なノードがない場合、LBはPendingのままになります。異なるポートを使用する限り、同じノード上に複数のサービスを公開することが可能であることに注意してください。
ServiceLBポッドが外部IPが設定されたノードで実行されると、ノードの外部IPがサービスの`status.loadBalancer.ingress`アドレスリストに`ipMode: VIP`で追加されます。そうでない場合、ノードの内部IPが使用されます。
外部IPへのトラフィックがネットワークアドレス変換 (NAT)の対象となる場合(例えば、ノードのパブリックIPを外部IPとして使用するパブリッククラウドで)、トラフィックはhostPortを介してServiceLBポッドにルーティングされます。ポッドはiptablesを使用して、サービスのClusterIPアドレスとポートにトラフィックを転送します。トラフィックがNATの対象でなく、LoadBalancerアドレスと一致する宛先アドレスで到着した場合、トラフィックは(通常はkube-proxyのiptablesチェーンまたはipvsによって)インターセプトされ、サービスのClusterIPアドレスとポートに転送されます。
使用方法
K3sでhttps://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer[LoadBalancerタイプのサービス]を作成します。
|
既知の問題
外部トラフィックがNATを使用してノードに到達し(例:パブリッククラウドで)、クライアントのソースIP保持などの目的で`externalTrafficPolicy=local`が必要な場合、ノードのいずれかに対してk3s設定`node-external-ip`を定義しないでください。そうしないと正しく機能しません。 |
ServiceLBノード選択の制御
1つ以上のノードに`svccontroller.k3s.cattle.io/enablelb=true`ラベルを追加すると、ServiceLBコントローラーは許可リストモードに切り替わり、ラベルを持つノードのみがLoadBalancerポッドをホストする資格を持ちます。ラベルが付けられていないノードは、ServiceLBによる使用から除外されます。
|
デフォルトでは、ノードにはラベルが付けられていません。すべてのノードがラベルなしのままである限り、ポートが利用可能なすべてのノードがServiceLBによって使用されます。 |
ServiceLBノードプールの作成
LoadBalancerのポッドをホストする特定のノードのサブセットを選択するには、目的のノードに`enablelb`ラベルを追加し、ノードとサービスに一致する`lbpool`ラベル値を設定します。次に例を示します。
-
ノードAとノードBに`svccontroller.k3s.cattle.io/lbpool=pool1`と`svccontroller.k3s.cattle.io/enablelb=true`のラベルを付けます。
-
ノードCとノードDに`svccontroller.k3s.cattle.io/lbpool=pool2`と`svccontroller.k3s.cattle.io/enablelb=true`のラベルを付けます。
-
ポート443で`svccontroller.k3s.cattle.io/lbpool=pool1`ラベルを持つLoadBalancerサービスを1つ作成します。このサービスのDaemonSetは、ノードAとノードBにのみポッドをデプロイします。
-
ポート443で`svccontroller.k3s.cattle.io/lbpool=pool2`ラベルを持つ別のLoadBalancerサービスを作成します。DaemonSetはノードCとノードDにのみポッドをデプロイします。
外部クラウドコントローラーマネージャーのデプロイ
K3sは、次のことを行う埋め込みクラウドコントローラーマネージャー(CCM)を提供します:
-
サービスロードバランサー LoadBalancerコントローラーをホストします。
-
`node.cloudprovider.kubernetes.io/uninitialized`汚染をクリアします。
-
--node-ip、--node-external-ip、--node-internal-dns、および`--node-external-dns`フラグに基づいてノードアドレスフィールドを設定します。
外部CCMをデプロイする前に、埋め込みCCMを無効にするために、すべてのK3sサーバーを`--disable-cloud-controller`フラグで起動する必要があります。外部CCMを使用する場合、ノードアドレスはK3sフラグ値の代わりにクラウドプロバイダーのインスタンスメタデータAPIによって提供されます。
|
ビルトインCCMを無効にし、外部の代替品をデプロイして適切に構成しない場合、ノードは汚染されたままでスケジュールできなくなります。 |