Kubernetes ナビ
本シリーズでは kubernetes クラスタを構成する様々なコンポーネント・技術をざっとご紹介しております。
- 【2021年4月版】Kubernetes ナビ その1: ディストリいろいろ
- 【2021年4月版】Kubernetes ナビ その2: ネットワーク・サービス関連
- 【2021年4月版】Kubernetes ナビ その3: ストレージ関連
- 【2021年4月版】Kubernetes ナビ その4: コンテナ関連
- 【2021年4月版】Kubernetes ナビ その5: Serverless
今回はその2となります。
Kubernetes のネットワーク・サービス関連のコンポーネントについてざっくり
k8s のネットワーク・サービス関連コンポーネントはさらに以下の分類にざっくり分かれています。
- LB/Ingress … ロードバランサー(LB)、Ingress はクラスタの外からの通信を受けてをクラスタ内に転送する層です。特にLBは"クラスタの外"にあるため、K8sとは別に置かれる場合が多いです。または Ingress のコンポーネントがLBを兼ねる場合もあります。
- DNS/サービスディスカバリ … クラスタ内部のポッド、コンテナの名前解決と監視を行います。クラスタ内の交通整理役です。k8sでは大抵、DNS単体ではなくDNS兼サービスディスカバリのコンポーネントになります。
- CNI … コンテナ間の通信をトンネリングする、コンテナネットワークインタフェース(CNI)に対応したコンポーネントです。
- サービスメッシュ … 上記のいずれかを組み合わせてPod群とサービスを包括的に一元管理できる仕組みがサービスメッシュです。
それでは以下でそれぞれの分類について代表的なコンポーネントをご紹介いたします。
LB/Ingress 系コンポーネント
クラウドサービスのK8sについて
まず上で書いた通り、LBはクラスタの外と中のつなぎ込み箇所なので、クラウドサービスとして提供されるk8sサービスの場合は、各社の持つ自社インフラのネットワークとクラスタを接続するために、各社独自のLB/Ingressが専用コンポーネントもしくはサービスとして提供されています。
以下に代表3社のヘルプページを記載しておきます。
- Google GKE … GKE Ingress
- AWS EKS … AWS Network Load Balancer (NLB), Classic Load Balancer (CLB)
- Azure AKS … パブリック Standard Load Balancer
これ、クラスタの一番の外側にあるサービスのエンドポイントであるLBの設定がクラウド各社によってガチガチなのはある程度は仕方ないことですが、k8sを運用する上で意外と問題になるので要注意です。
クラウドサービスによってサービスとLBの構成がキメキメになってしまうので、Podの構成によってクラウドの移行がまったくできなくなってしまう場合もあります。マルチクラウドのクラスタ管理は相当の沼です。。。
ロードバランサー(LB)
LBの比較には以下のブログ記事を発見いたしましたのでリンクと比較表を載せておきます。ありがとうございます。
この記事では MetalLB, PureLB, Porter の比較を行っています。
MetalLB | PureLB | Porter | |
---|---|---|---|
IPAM | integrated | integrated & external | integrated |
Uses Linux network Subsystem | no | yes | no |
Local Addresses | yes | yes | incomplete |
Routed addresses | yes | yes | yes |
Protocol Support | BGP | any (BGP,OSPF,ISIS,RIP) | BGP partial |
IPv4 & IPv6 | no | yes | no |
Integration with routed CNI | Difficult | easy | possible |
Config using CRD | no | yes | yes |
Redundancy & failover | good | good | poor |
Porterは2020年の夏にCNCF に加えられた新しいプロジェクトなのでまだまだこれからが期待、といった感じです。
Ingress コントローラー
Kubernetes 標準搭載の Ingress コントローラーは、GCEとnginxの2つです。
追加のIngress コントローラーはかなり多くあります。 公式サイトにある以下にリストを転載いたします。
- AKS Application Gateway Ingress ControllerはAzure Application Gatewayを利用してAKSクラスターでIngressを実行可能にするIngressコントローラーです。
- Ambassador API GatewayはEnvoyベースのIngressコントローラーで、Datawireによるコミュニティ版または商用版のサポートがあります。
- AppsCode Inc.では、最も広く使用されているHAProxyベースのIngressコントローラーであるVoyagerのサポートと保守を提供しています。
- AWS ALB Ingress ControllerはAWS Application Load Balancerを使用したIngressを有効にします。
- Contourは、VMwareが提供し、サポートしているEnvoyベースのIngressコントローラーです。
- Citrixは、ベアメタルとクラウドのデプロイ用に、ハードウェア(MPX)、仮想化(VPX)、フリーコンテナ化(CPX) ADC用のIngressコントローラーを提供しています。
- F5 NetworksはF5 BIG-IP Container Ingress Services for Kubernetesのサポートと保守を提供しています。
- GlooはEnvoyをベースにしたオープンソースのIngressコントローラーで、solo.ioからのエンタープライズサポートでAPI Gateway機能を提供しています。
- HAProxy Ingressは、HAProxy用の高度にカスタマイズ可能なコミュニティ主導のIngressコントローラーです。
- HAProxy TechnologiesはHAProxy Ingress Controller for Kubernetesのサポートと保守を提供しています。公式ドキュメントを参照してください。
- IstioベースのIngressコントローラーControl Ingress Traffic。
- Kongは、Kong Ingress Controller for Kubernetesのコミュニティ版と商用版のサポートと保守を提供しています。
- NGINX, Inc.はNGINX Ingress Controller for Kubernetesのサポートと保守を提供しています。
- Skipperは、カスタムプロキシーを構築するためのライブラリーとして設計された、Kubernetes Ingressなどのユースケースを含む、サービス構成用のHTTPルーターとリバースプロキシーです。
- Traefikはフル機能(Let's Encrypt, secrets, http2, websocket)のIngressコントローラーで、Containousによる商用サポートもあります。
Ingressコントローラーのこの量ですよ。。だいたいL4/L7のLBとリバプロを兼ねているので色々です。
どれだけその製品のヘルプページのメニューに親しんでいるかで決めればいいと思います。ヘルプが見にくい製品はもうアレですから。といっても個人的には Nginx で困ったら Traefik で、って感じなので Traefik のヘルプページは慣れました。traefik が使いやすいとは言ってないです。
DNS/サービスディスカバリ/サービスメッシュ
DNS/サービスディスカバリ単体のOSSプロジェクトとしては現状 CoreDNS 一択なのではないでしょうか。というか、大抵はサービスディスカバリとサービスメッシュは一体としてプロジェクトで開発されています。
というわけでここではサービスメッシュのOSSを紹介しますが、それよりもありがたい記事がありましたので以下にリンクを貼っておきます。ありがとうございます。
深い内容については上記の記事をご覧ください。以下に記事に紹介されているプロジェクトのリストとリンクだけ貼っておきます
Istio
Envoy
Linkerd
Consul
CNI(コンテナネットワークインタフェース)
CNIそのものも CNCF 傘下のプロジェクトです
このページにてサードパーティのプラグインが列挙されています。
- Project Calico - a layer 3 virtual network
- Weave - a multi-host Docker network
- Contiv Networking - policy networking for various use cases
- SR-IOV
- Cilium - BPF & XDP for containers
- Infoblox - enterprise IP address management for containers
- Multus - a Multi plugin
- Romana - Layer 3 CNI plugin supporting network policy for Kubernetes
- CNI-Genie - generic CNI network plugin
- Nuage CNI - Nuage Networks SDN plugin for network policy kubernetes support
- Silk - a CNI plugin designed for Cloud Foundry
- Linen - a CNI plugin designed for overlay networks with Open vSwitch and fit in SDN/OpenFlow network environment
- Vhostuser - a Dataplane network plugin - Supports OVS-DPDK & VPP
- Amazon ECS CNI Plugins - a collection of CNI Plugins to configure containers with Amazon EC2 elastic network interfaces (ENIs)
- Bonding CNI - a Link aggregating plugin to address failover and high availability network
- ovn-kubernetes - an container network plugin built on Open vSwitch (OVS) and Open Virtual Networking (OVN) with support for both Linux and Windows
- Juniper Contrail / TungstenFabric - Provides overlay SDN solution, delivering multicloud networking, hybrid cloud networking, simultaneous overlay-underlay support, network policy enforcement, network isolation, service chaining and flexible load balancing
- Knitter - a CNI plugin supporting multiple networking for Kubernetes
- DANM - a CNI-compliant networking solution for TelCo workloads running on Kubernetes
- VMware NSX – a CNI plugin that enables automated NSX L2/L3 networking and L4/L7 Load Balancing; network isolation at the pod, node, and cluster level; and zero-trust security policy for your Kubernetes cluster.
- cni-route-override - a meta CNI plugin that override route information
- Terway - a collection of CNI Plugins based on alibaba cloud VPC/ECS network product
- Cisco ACI CNI - for on-prem and cloud container networking with consistent policy and security model.
- Kube-OVN - a CNI plugin that bases on OVN/OVS and provides advanced features like subnet, static ip, ACL, QoS, etc.
- Project Antrea - an Open vSwitch k8s CNI
- OVN4NFV-K8S-Plugin - a OVN based CNI controller plugin to provide cloud native based Service function chaining (SFC), Multiple OVN overlay networking
- Azure CNI - a CNI plugin that natively extends Azure Virtual Networks to containers
いや、多いですね。。。そこでちょっと古いですがCNIを比較するスライドを発見いたしましたので以下にご紹介いたします。
ここでは flannel, Cilium, Calico, Contiv, TungstenFabric の5つを比較しております。
まぁちょっと古いですが・・・ご参考になればと。
それでは今回はここまでといたします。