13 イングレス・コントローラのインストールと構成

イングレス・コントローラは、単純なホストベースまたはURLベースのHTTOルーティングを可能にするロード・バランサです。

この章の内容は次のとおりです。

Kubernetesサービス

Kubernetesサービスは、イングレス・デプロイメントの一部として作成されます。

表13-1 Kubernetesサービス

サービス名 タイプ サービス・ポート マップ済ポート

nginx-ingress-ingress-nginx-idmedg

NodePort

80

443

30777

30443

これらは、コントローラとの対話に使用するポートです。

この章で使用される変数

この章の以降の項では、多数のファイルを作成する手順について説明します。これらのサンプル・ファイルには、デプロイメントに適用可能な値に置換する必要がある変数が含まれています。

変数の形式は<VARIABLE_NAME>です。次の表に、これらの各変数に設定する必要がある値を示します。

表13-2 変更する必要がある変数

変数 サンプル値 説明

<INGRESSNS>

ingressns

イングレス・ネームスペースの名前。

<GIT_USER>

mygituser

GitHubにログインするユーザーの名前。

<GIT_TOKEN>

mytoken

gitログイン・トークン。

<WORKDIR>

/workdir/INGRESS/

イングレス用の作業ディレクトリ。

<INGRESS_SERVICE_TYPE>

NodePort

作成するイングレス・サービスのタイプ。オプションは、NodePortおよびLoadBalancerです。

<INGRESS_NAME>

idmedg

コントローラの任意の名前。

<INGRESS_REPLICAS>

2

起動するイングレス・コントローラのコピー数。高可用性の実装の場合、この値は2以上である必要があります。

<INGRESS_HTTP_K8>

30777

HTTP通信に使用するKubernetesサービス・ポート。

<INGRESS_HTTPS_K8>

30443

HTTPS通信に使用するKubernetesサービス・ポート。

<LDAPNS>

oudns

LDAPディレクトリが実行されているネームスペース。

<LDAP_K8>

30389

イングレスLDAPトラフィックの公開に使用するKubernetesポート。

<LDAPS_K8>

30636

イングレスLDAPSトラフィックの公開に使用するKubernetesポート。

<OUD_POD_PREFIX>

edg

トラフィックの送信先のLDAPネームスペース内のサービス名で使用される接頭辞。

<USE_PROM>

false

イングレス・メトリックをPrometheusに送信する場合は、trueに設定します。

Kubernetesネームスペースの作成

Kubernetesネームスペースは、イングレス・コントローラの格納に使用されます。

次のコマンドを使用して、イングレスのネームスペースを作成します:
kubectl create namespace <INGRESSNS>
たとえば:
kubectl create namespace ingressns

レジストリ・シークレットの作成

nginxイングレス・コントローラは、GitHubのコンテナ・レジストリから取得されます。オンデマンドでイメージをダウンロードするには、GitHub資格証明を使用してレジストリ・シークレットを作成する必要があります。「GitHubへのログイン」を参照してください。
イングレス・ネームスペースにgitcredというシークレットを作成するには、次のコマンドを使用します:
kubectl create secret docker-registry gitcred –n <INGRESSNS> --docker-server=ghcr.io --docker-username=<GIT_USER> --docker-password="<GIT_TOKEN>"
たとえば:
kubectl create secret docker-registry gitcred –n ingressns --docker-server=ghcr.io --docker-username=mygituser --docker-password="mytoken"

Helmリポジトリへのイングレス・イメージの追加

helmコマンドを使用して、nginxコンテナ・イメージをHelmリポジトリに追加します。

コマンドは次のとおりです:
helm repo add stable https://kubernetes.github.io/ingress-nginx
helm repo update

HTTPS/HTTPおよびLDAPS/LDAPをサポートするためのイングレス・コントローラのインストール

イングレス・コントローラを作成すると、HTTPまたはHTTPSトラフィック(あるいはその両方)がサポートされます。SSLトラフィックをロード・バランサの後ろで終端する場合、HTTPSトラフィックを有効にする必要はありません。

Oracle Identity Management Microservicesのみをデプロイする場合で、それを既存のOracle HTTP Serverデプロイメントの背後に配置しない場合は、エンドツーエンドSSLのためにイングレスを構成するか、イングレスでSSLを終端させます。

Oracle LDAPディレクトリをKubernetesクラスタ内にデプロイする場合は、オプションで、イングレスを介してLDAPおよびLDAPSトラフィックを公開できます。Kubernetesクラスタの外部でLDAPディレクトリにアクセスする必要がない場合は、このオプションを有効にしないことをお薦めします。

イングレス・コントローラを作成するには、次のステップを実行します:

SSLリクエストのための自己署名証明書の作成

独自のCA証明書を購入した場合、またはイングレスをOracle HTTP Serverの背後にイングレスを配置する場合は、このステップをスキップできます。

自己署名証明書を使用する場合は、次のコマンドを実行します:

  1. 次の内容を含むssl_cert_config.txtというテキスト・ファイルを作成します:
    # Copyright (c) 2022, Oracle Corporation and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    #
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    [req_distinguished_name]
    CN = *.example.com
    [v3_req]
    keyUsage = keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = example.com

    ここで、example.comはリクエストが発生するドメインです。たとえば、http://iadadmin.example.comのようなURLがある場合、ドメインはexample.comになります。

  2. Linuxコマンドopensslを使用して、証明書を作成します:
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /workdir/INGRESS/ingress.key -out /workdir/INGRESS/ingress.crt -config /workdir/INGRESS/ssl_cert_config.txt -extensions v3_req
  3. 次のコマンドを使用して、生成された証明書を検証します:
    openssl x509 -noout -text /workdir/INGRESS/ingress.crt

証明書を使用したKubernetesシークレットの作成

証明書をKubernetesシークレットにロードします。独自の証明書を購入した場合は、かわりにそれを使用できます。

Kubernetesでシークレットを作成するには、次のコマンドを使用します:
kubectl -n <INGRESSNS> create secret tls common-tls-cert --key /workdir/ingress.key --cert /workdir/ingress.crt

Helmオーバーライド・ファイルの作成

イングレス・コントローラで公開する内容によっては、別のオーバーライド・ファイルを使用します。後述の例は、次のソートを示しています。
  • HTTPおよびHTTPS終端トラフィック用のイングレス・コントローラの作成
  • HTTP、HTTPSおよびLDAPトラフィック用のイングレス・コントローラの作成

作業ディレクトリ内にingress_override.yamlというファイルを作成します。デプロイメントによってファイルの内容は異なります。

この項には次のトピックが含まれます:

イングレス・サービスのタイプ

2つのタイプのイングレス・サービスを作成できます。

NodePortサービスを作成する場合、イングレス・コントローラとの対話は、Kubernetesワーカー・ノードと、コントローラに割り当てられている関連Kubernetesサービス・ポートを介して行われます。

LoadBalancerサービスを作成すると、イングレス・コントローラがIPアドレスに割り当てられます。イングレス・コントローラとの対話は、このIPアドレスを介して直接行われます。

LoadBalancerタイプのサービスの作成は、使用しているKubernetesのフレーバによって異なります。このサービスを作成するには、ご使用のプラットフォームのドキュメントを参照してください。

たとえば、次のステップを実行して、Oracle Cloud InfrastructureにLoadBalancerサービスを作成できます:
  1. サンプル・ファイル(「HTTPおよびHTTPS用のオーバーライド・ファイル」および「HTTP、HTTPS、LDAPおよびLDAPS用のオーバーライド・ファイル」を参照)を使用して、次の変更を行います:

    Set type: LoadBalancer

  2. LoadBalancerタイプの下に、次の行を追加します:
    annotations:
          service.beta.kubernetes.io/oci-load-balancer-internal: "true"
          service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.iad....kdi3ds.....vqri332zdrr3rm"
          service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10"
          service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "10"
          service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
  3. oci-load-balancer-subnet1を、Kubernetesノードが存在するサブネットのOCIDに設定します。
HTTPおよびHTTPS用のオーバーライド・ファイル
次に、HTTPおよびHTTPS終端トラフィック用のHelmファイルの例を示します:
imagePullSecrets:
 - name: gitcred
controller:
  name: <INGRESS_NAME>
  ingressClassResource:
    name: nginx
  config:
    use-forwarded-headers: true
    enable-underscores-in-headers: true
  wildcardTLS:
    secret: tls-cert
  replicaCount: <INGRESS_REPLICAS>
  service:
    type: <INGRESS_SERVICE_TYPE>
    nodePorts:
      http: <INGRESS_HTTP_K8>
      https: <INGRESS_HTTPS_K8>
  admissionWebhooks:
    enabled: false
  metrics:
    enabled: <USE_PROM>
    serviceMonitor:
      enabled: <USE_PROM>
HTTP、HTTPS、LDAPおよびLDAPS用のオーバーライド・ファイル
次に、LDAP/LDAPSディレクトリ・サービスの公開が追加された、HTTPおよびHTTPS終端トラフィック用のHelmファイルの例を示します:
imagePullSecrets:
 - name: gitcred
tcp:
  1389: <LDAPNS>/<OUD_POD_PREFIX>-oud-ds-rs-lbr-ldap:ldap
  1636: <LDAPNS>/<OUD_POD_PREFIX>-oud-ds-rs-lbr-ldap:ldaps
controller:
  name: <INGRESS_NAME>
  ingressClassResource:
    name: nginx
  config:
    use-forwarded-headers: true
    enable-underscores-in-headers: true
  wildcardTLS:
    secret: tls-cert
  replicaCount: <INGRESS_REPLICAS>
  service:
    type: <INGRESS_SERVICE_TYPE>
    nodePorts:
      http: <INGRESS_HTTP_K8>
      https: <INGRESS_HTTPS_K8>
      tcp:
        1389: <LDAP_K8>
        1636: <LDAPS_K8>
  admissionWebhooks:
    enabled: false
  metrics:
    enabled: <USE_PROM>
    serviceMonitor:
      enabled: <USE_PROM>
説明:

イングレス・コントローラの作成

イングレス・コントローラを作成するには、前に作成したオーバーライド・ファイルを指定して次のhelmコマンドを実行する必要があります:
helm install nginx-ingress -n ingressns \
      --values /workdir/INGRESS/ingress_override.yaml \
      stable/ingress-nginx

ここで、nginx-ingressはイングレス・ネームスペースです。例: ingressns

  1. 最初のステップのテキストをここに入力します。
  2. ステップ2のテキストをここに入力します。

イングレス・コントローラの検証

イングレス・コントローラが正常に作成されたことを検証するには、次のコマンドを使用します:

kubectl get all,ingress -n <INGRESSNS>
たとえば:
kubectl get all,ingress -n ingressns

出力が次のように表示されます。

NAME                                                         READY   STATUS      RESTARTS   AGE
pod/nginx-ingress-ingress-nginx-idmedg-bd4fdc996-794l5       1/1     Running     0         28h
pod/nginx-ingress-ingress-nginx-idmedg-bd4fdc996-qqvqf       1/1     Running     0         28h

NAME                                         TYPE       CLUSTER-IP    EXTERNAL-IP  PORT(S)                                                  AGE
service/nginx-ingress-ingress-nginx-idmedg   NodePort   10.107.148.40 <none>       80:30777/TCP,443:30443/TCP,1389:31389/TCP,1636:31636/TCP 28h

NAME                                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-ingress-ingress-nginx-idmedg   2/2     2            2           28h

NAME                                                          DESIRED   CURRENT  READY   AGE
replicaset.apps/nginx-ingress-ingress-nginx-idmedg-bd4fdc996  2         2        2       28h