8.4 NGINXコントローラのインストール

この項では、NGINXコントローラをインストールします。

ブラウザからワーカー・ノードのホスト名またはIPアドレスに直接接続できる場合は、--set controller.service.type=NodePortパラメータを使用してNGINXをインストールします。

Kubernetesクラスタの管理対象サービス(Oracle Cloud Infrastructure (OCI)上のOracle Kubernetes Engine (OKE)など)を使用し、ブラウザからロード・バランサのIPアドレスに接続する場合は、--set controller.service.type=LoadBalancerパラメータを使用します。これにより、管理対象サービスは、トラフィックをNGINXイングレスに送信するようロード・バランサを設定します。

次の手順では、--set controller.service.type=NodePortを使用します。管理対象サービスを使用する場合は、--set controller.service.type=LoadBalancerに変更します。

SSLを使用したイングレス・コントローラの構成

SSLを使用するようにイングレス・コントローラを構成するには、次のコマンドを実行します:
helm install nginx-ingress \
-n <domain_namespace> \
--set controller.service.nodePorts.http=<http_port> \
--set controller.service.nodePorts.https=<https_port> \
--set controller.extraArgs.default-ssl-certificate=<domain_namespace>/<ssl_secret> \
--set controller.service.type=<type> \
--set controller.config.use-forwarded-headers=true \
--set controller.config.enable-underscores-in-headers=true \
--set controller.admissionWebhooks.enabled=false \
stable/ingress-nginx \
--version 4.7.2
説明:
  • <domain_namespace>は、ネームスペースです(mynginxnsなど)。
  • <http_port>は、コントローラがリスニングするHTTPポートです(30777など)。
  • <https_port>は、コントローラがリスニングするHTTPSポートです(30443など)。
  • <type>は、コントローラ・タイプです。NodePortを使用する場合は、NodePortに設定します。管理対象サービスを使用する場合は、LoadBalancerに設定します。LoadBalancerを使用する場合は、--set controller.service.nodePorts.http=<http_port>および--set controller.service.nodePorts.https=<https_port>を削除します。
  • <ssl_secret>は、「SSL証明書の生成」で作成したシークレットです。
例:
helm install nginx-ingress -n mynginxns \
--set controller.service.nodePorts.http=30777 \
--set controller.service.nodePorts.https=30443 \
--set controller.extraArgs.default-ssl-certificate=mynginxns/accessdomain-tls-cert \
--set controller.service.type=NodePort \
--set controller.config.use-forwarded-headers=true \
--set controller.config.enable-underscores-in-headers=true \
--set controller.admissionWebhooks.enabled=false \
stable/ingress-nginx \
--version 4.7.2
出力は次のようになります:
NAME: nginx-ingress
LAST DEPLOYED: <DATE>

NAMESPACE: mynginxns
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The nginx-ingress controller has been installed.
Get the application URL by running these commands:
  export HTTP_NODE_PORT=30777
  export HTTPS_NODE_PORT=30443
  export NODE_IP=$(kubectl --namespace mynginxns get nodes -o jsonpath="{.items[0].status.addresses[1].address}")

  echo "Visit http://$NODE_IP:$HTTP_NODE_PORT to access your application via HTTP."
  echo "Visit https://$NODE_IP:$HTTPS_NODE_PORT to access your application via HTTPS."

An example Ingress that makes use of the controller:

  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
    name: example
    namespace: foo
  spec:
    ingressClassName: example-class
    rules:
       - host: www.example.com
        http:
          paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: exampleService
                  port: 80
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
      - hosts:
        - www.example.com
        secretName: example-tls


If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls

SSLを使用しないイングレス・コントローラの構成

SSLを使用しないようにイングレス・コントローラを構成するには、次のコマンドを実行します:
helm install nginx-ingress \
-n <domain_namespace> \
--set controller.service.nodePorts.http=<http_port> \
--set controller.service.type=NodePort \
--set controller.config.use-forwarded-headers=true \
--set controller.config.enable-underscores-in-headers=true \
--set controller.admissionWebhooks.enabled=false \
stable/ingress-nginx
--version 4.7.2
説明:
  • <domain_namespace>は、ネームスペースです(mynginxnsなど)。
  • <http_port>は、コントローラがリスニングするHTTPポートです(30777など)。
  • <type>は、コントローラ・タイプです。NodePortを使用する場合は、NodePortに設定します。管理対象サービスを使用する場合は、LoadBalancerに設定します。LoadBalancerを使用する場合は、--set controller.service.nodePorts.http=<http_port>を削除します。
例:
helm install nginx-ingress \
-n mynginxns \
--set controller.service.nodePorts.http=30777 \
--set controller.service.type=NodePort \
--set controller.config.use-forwarded-headers=true \
--set controller.config.enable-underscores-in-headers=true \
--set controller.admissionWebhooks.enabled=false \
stable/ingress-nginx \
--version 4.7.2
出力は次のようになります:
NAME: nginx-ingress
LAST DEPLOYED: <DATE>

NAMESPACE: mynginxns
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The nginx-ingress controller has been installed.
Get the application URL by running these commands:
  export HTTP_NODE_PORT=30777
  export HTTPS_NODE_PORT=$(kubectl --namespace mynginxns get services -o jsonpath="{.spec.ports[1].nodePort}" nginx-ingress-ingress-nginx-controller)
  export NODE_IP=$(kubectl --namespace mygninx get nodes -o jsonpath="{.items[0].status.addresses[1].address}")

  echo "Visit http://$NODE_IP:$HTTP_NODE_PORT to access your application via HTTP."
  echo "Visit https://$NODE_IP:$HTTPS_NODE_PORT to access your application via HTTPS."

An example Ingress that makes use of the controller:

  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
    name: example
    namespace: foo
  spec:
    ingressClassName: example-class
    rules:
       - host: www.example.com
        http:
          paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: exampleService
                  port: 80
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
      - hosts:
        - www.example.com
        secretName: example-tls


If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls