试着列举一下Kubernetes中的Ingress Controller清单
首先
Ingress Controller是一个起到L7负载均衡器功能的组件,而Ingress资源则是定义了该规则的东西。实际上已经有很多实现了这个Ingress Controller,并且因为环境不同,编写方式和特性也有大小差异。
希望能在今天的介绍中,每个Ingress Controller都有机会被介绍一下。
入口控制器
kubernetes/ingress-nginx和nginxinc/kubernetes-ingress与NGINX一起使用。
Nginx通过Ingress有两种类型。一种是由Kubernetes社区管理的kubernets/ingress-nginx,另一种是由NGINX公司及其社区管理的nginxinc/kubernetes-ingress。
请参考”Differences Between nginxinc/kubernetes-ingress and kubernetes/ingress-nginx Ingress Controllers”以获取有关它们的详细信息。
作者Kubernetes communityNGINX Inc and communityNGINX Inc and communityNGINバージョンCustom NGINX build that includes several third-party modulesNGINX official mainline buildNGINX Plus商用サポートN/AN/A含まれているLB設定
同一ホストに複数のIngressルールをマージする利用可利用可利用可HTTP load balancing extensions – Annotationssupported annotationsを参照supported annotationsを参照supported annotationsを参照HTTP load balancing extensions — ConfigMapsupported ConfigMap keysを参照supported ConfigMap keysを参照supported ConfigMap keysを参照TCP/UDPConfigMap経由ネイティブのNGINX設定によるConfigMap経由ネイティブのNGINX設定によるConfigMap経由Websocket利用可annotation経由で利用可annotation経由で利用可TCP SSLパススルーConfigMap経由で利用可利用不可利用不可JWT validation利用不可利用不可利用可セッション管理サードパーティモジュール経由で利用可利用不可利用可Configurationテンプレートtemplateを参照templatesを参照templatesを参照デプロイ
Command-line引数argumentsを参照argumentsを参照argumentsを参照デフォルトサーバの為のTLS証明書と鍵command-line引数(必要に応じて)/ 自動生成command-line引数(必要に応じて)command-line引数(必要に応じて)Helmチャート利用可利用可利用可運用
拡張ステータスサードパーティのモジュール経由利用不可利用可エンドポイントの動的再設定(設定の再リロードはしない)サードパーティのLuaモジュールによって利用可利用不可利用可
轮廓
Contour是一种通过部署Envoy来运行的Ingress Controller。它与Traefik类似,支持动态配置更新,这是其中一个特点。
此外,还有通过Custom Resource Definition(CRD)实现的新的Ingress API(IngressRoute),可以扩展现有的Ingress API的功能。
其他特点包括:
-
- WebSocket対応
-
- ヘルスチェック
- 5種類のLB algorithm(RoundRobin, WeightedLeastRequest, RingHash, Maglev, Ramdom)
另外,IngressRoute的特点如下。
-
- namespaceのVirtual hostsとTLS証明書の設定可否を制限する機能
-
- パスorドメインルーティングを別のnamespaceに委譲機能
-
- 単一のルート内での複数のServiceの受け入れとトラフィックの負荷分散
-
- annotationなしでのServiceの重み付けとロードバランシング
- 作成時のIngressRouteのバリデーションと作成後のステータスレポート
与标准的Ingress相比,可以得出以下结论。两者在描述方面没有太大的差异。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basic
spec:
rules:
- host: foo-basic.bar.com
http:
paths:
- backend:
serviceName: s1
servicePort: 80
apiVersion: contour.heptio.com/v1beta1
kind: IngressRoute
metadata:
name: basic
spec:
virtualhost:
fqdn: foo-basic.bar.com
routes:
- match: /
services:
- name: s1
port: 80
Traefik (用中文原生方式进行释义:特拉菲克)
Traefik是一种由Containous公司开发的用于HTTP反向代理/负载均衡的工具,可以集成到Docker Swarm、Kubernetes和Marathon等编排器中。与其他入口控制器不同,Traefik还具有断路器和Web界面等功能。
顺便提一下,据说2018年12月11日,TraefikEE的企业版本作为公开测试版登场了。在TraefikEE的集群化中,据说它使用了Raft作为分布一致性算法,该算法用于Kubernetes的etcd的集群化。这使得TLS证书和配置可以安全地管理和复制。相较于OSS版本,TraefikEE在增强分布式架构方面更具优势,例如HA和密钥分布管理,专注于确保可用性、可扩展性和安全性。
在TraefikEE中,似乎用数据平面和控制平面来管理节点。
我感觉有一种Istio的感觉…
在Traefik中,可以使用Deployment或DeamonSet进行部署。
以下是一个示例。
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-ingress-controller
namespace: kube-system
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: traefik-ingress-controller
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
replicas: 1
selector:
matchLabels:
k8s-app: traefik-ingress-lb
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
serviceAccountName: traefik-ingress-controller
terminationGracePeriodSeconds: 60
containers:
- image: traefik
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
- name: admin
containerPort: 8080
args:
- --api
- --kubernetes
- --logLevel=INFO
---
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- protocol: TCP
port: 80
name: web
- protocol: TCP
port: 8080
name: admin
type: NodePort
您可以使用以下输入来使用stable/traefik的Helm图表,而不是使用Deployment进行部署。
helm install stable/traefik
其他掌控者
以下列出了没有提及的入口控制器。
Kubernetes的F5大型IP控制器
列举以下是F5作为经典负载均衡器的Ingress Controller的特点。
-
- 動的にBIG-IPオブジェクトの作成、管理、削除ができる
-
- NodePortもしくはClusterIPを経由で、BIG-IPデバイスからKubernetesクラスタにトラフィックを転送する
-
- F5 iAppsのサポート
-
- kubernetesによって作られたF5特有のVirtualServerオブジェクトを処理する
- F5特有の拡張機能の使用で、標準Kubernetes Ingressを処理する
请查看F5 BIG-IP Controller for Kubernetes以获取更详细的信息。
Kong Ingress 控制器适用于 Kubernetes。
以下是Kong的特点。
-
- Kongの設定にIngressの使用
-
- ロードバランスしとアクティブ&パッシブヘルスチェックのサポート
-
- リクエストがサービスにプロキシされる際に、カスタムコードを実行する
-
- プラグインを使用することで、リクエスト/レスポンスを即座に変更可能
-
- 認証プラグインを使用してのサービス保護
- CRDを使用するKongの設定と宣言的なKongの管理
更详细的信息,请参阅Github存储库Kong/kubernetes-ingress-controller。
nghttpx入口控制器
ZLab公司开发的zlabjp/nghttpx-ingress-lb是一个支持HTTP/2的Ingress Controller,它基于Nginx Ingress Controller构建而成。
HAProxy 负载均衡器
使用haproxy作为多功能代理服务器的知名Ingress控制器是jcmoraisjr/haproxy-ingress。
谷歌云引擎 (GKE)
由于GKE已经部署了专用的Ingress Controller,因此可以省略不提。
最后
我虽然无法整理得很好,但希望这些信息对大家的新收集能有所帮助。
如果有什么需要指正的地方,请在评论中指出。
今年快要结束了,圣诞节快乐。
文献引用
Ingress 入口
Traefik 文档
nginxinc/kubernetes-ingress 与 kubernetes/ingress-nginx Ingress 控制器之间的差异
为了在 Kubernetes 中使用 GKE 风格的 Ingress,自己实现了 Ingress 控制器