イングレスとロードバランサ 質問する

イングレスとロードバランサ 質問する

Kubernetes における Ingress と Load Balancer の役割について、かなり混乱しています。

私の理解する限り、Ingress はインターネットからの受信トラフィックをクラスター内で実行されているサービスにマッピングするために使用されます。

ロードバランサーの役割は、トラフィックをホストに転送することです。その点では、イングレスとロードバランサーの違いは何でしょうか? また、Amazon ELB や ALB と比較した Kubernetes 内のロードバランサーの概念は何でしょうか?

ベストアンサー1

ロード バランサー: Kubernetes LoadBalancer サービスは、Kubernetes クラスター内になく、他の場所に存在する外部ロード バランサーを指すサービスです。ポッドが外部にルーティング可能であると仮定すると、これらのサービスはポッドと連携できます。Google と AWS は、この機能をネイティブで提供しています。Amazon の場合、これは ELB に直接マッピングされ、AWS で実行されている Kubernetes は、展開された LoadBalancer サービスごとに ELB インスタンスを自動的にプロビジョニングおよび構成できます。

Ingress: Ingress は、実際には、それらをリッスンしているコントローラーに渡す一連のルールにすぎません。一連の Ingress ルールをデプロイすることはできますが、それらを処理できるコントローラーがなければ何も起こりません。LoadBalancer サービスは、そのように構成されている場合、Ingress ルールをリッスンできます。

クラスター外部の外部ルーティング可能な IP を持ちながら、クラスター内に存在するポッドを指すNodePortサービスを作成することもできます。これは Ingress コントローラーである可能性があります。

イングレスコントローラは、イングレスルールを解釈するように構成されたポッドです。Kubernetesでサポートされている最も人気のあるイングレスコントローラの1つはnginxです。Amazonに関しては、ALBに使える入力コントローラとして。

例えば、これnginx コントローラーは、定義したイングレス ルールを取り込み、それを nginx.conf ファイルに変換して、ポッドにロードし、起動することができます。

たとえば、イングレスを次のように定義したとします。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
   ingress.kubernetes.io/rewrite-target: /
 name: web-ingress
spec:
  rules:
  - host: kubernetes.foo.bar
    http:
      paths:
      - backend:
          serviceName: appsvc
          servicePort: 80
        path: /app

次に、nginx コントローラー ポッドを調べると、次のルールが定義されていることがわかります/etc/nginx.conf

server {
    server_name kubernetes.foo.bar;
    listen 80;
    listen [::]:80;
    set $proxy_upstream_name "-";
    location ~* ^/web2\/?(?<baseuri>.*) {
        set $proxy_upstream_name "apps-web2svc-8080";
        port_in_redirect off;

        client_max_body_size                    "1m";

        proxy_set_header Host                   $best_http_host;

        # Pass the extracted client certificate to the backend

        # Allow websocket connections
        proxy_set_header                        Upgrade           $http_upgrade;
        proxy_set_header                        Connection        $connection_upgrade;

        proxy_set_header X-Real-IP              $the_real_ip;
        proxy_set_header X-Forwarded-For        $the_x_forwarded_for;
        proxy_set_header X-Forwarded-Host       $best_http_host;
        proxy_set_header X-Forwarded-Port       $pass_port;
        proxy_set_header X-Forwarded-Proto      $pass_access_scheme;
        proxy_set_header X-Original-URI         $request_uri;
        proxy_set_header X-Scheme               $pass_access_scheme;

        # mitigate HTTPoxy Vulnerability
        # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
        proxy_set_header Proxy                  "";

        # Custom headers

        proxy_connect_timeout                   5s;
        proxy_send_timeout                      60s;
        proxy_read_timeout                      60s;

        proxy_redirect                          off;
        proxy_buffering                         off;
        proxy_buffer_size                       "4k";
        proxy_buffers                           4 "4k";

        proxy_http_version                      1.1;

        proxy_cookie_domain                     off;
        proxy_cookie_path                       off;

    rewrite /app/(.*) /$1 break;
    rewrite /app / break;
    proxy_pass http://apps-appsvc-8080;
    
    }

Nginx は、クラスター内のhttp://kubernetes.foo.bar/appサービスを指すようにルーティングするルールを作成しました。appsvc

ここはnginx イングレス コントローラーを使用して Kubernetes クラスターを実装する方法を説明します。

おすすめ記事