试着列举一下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/ingress-nginxnginxinc/kubernetes-ingress with NGINXnginxinc/kubernetes-ingress with NGINX Plus基本機能

作者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 控制器

就文档数量来看,我非常后悔没有花更多的时间来完成。
广告
将在 10 秒后关闭
bannerAds