Citrix ADC ingress controller

Citrix イングレスコントローラーでCitrix ADC証明書の検証を有効にする

Citrix ingress controller には、HTTPSプロトコルを使用して、Citrix ingress controller とCitrix ADC間の安全な通信を確保するオプションがあります。これは、Citrix ADCにプリロードされた証明書を使用することで実現できます。Citrix Ingress Controllerでは、起こり得る中間者(MITM)攻撃を回避するための追加手段として、Citrix ADCによって提供されるSSLサーバー証明書を検証することもできます。

Citrix ingress controller によるADCサーバー証明書の証明書署名と共通名検証を有効にするために、セキュリティ管理者はオプションで署名付き(または自己署名)証明書をCitrix ADCにインストールし、対応するCA証明書バンドルでCitrix ingress controller を構成できます。検証が有効になり、CA証明書バンドルが構成されると、Citrix ingress controller は証明書の検証(証明書名の検証を含む)を開始します。検証に失敗すると、Citrix ingress controller は同じログを記録し、セキュリティで保護されていないチャネルではどの構成も使用されません。

この検証はデフォルトでオフになっており、管理者はCitrix ingress controller で検証を次のように有効にすることを選択できます。

前提条件

  • 証明書の検証を有効にするには、適切なSSLサーバー証明書(証明書の件名に適切なサーバー名またはIPアドレス)を使用してCitrix ADCを構成する必要があります。詳しくは、 Citrix ADC のドキュメントを参照してください

  • インストールされたサーバー証明書とキーのペアのCA証明書は、Citrix ingress controller がこれらの証明書の検証を有効にするように構成するために使用されます。

証明書検証用にCitrix ingress controller を構成する

CA証明書を構成できるようにするには、Citrix Ingress Controllerがマウントされたストレージボリューム上のCA証明書にアクセスできるように、CA証明書をKubernetesシークレットとして構成する必要があります。

既存の証明書の Kubernetes シークレットを生成するには、kubectlコマンドを使用します。

  $ kubectl create secret generic ciccacert --from-file=path/myCA.pem –namespace default

  secret “ciccacert” created

また、次の YAML 定義を使用して Kubernetes シークレットを生成することもできます。

    apiVersion: v1
    kind: Secret
    metadata:
      name: ciccacert
      data:
        myCA.pem: <base64 encoded cert>

以下は、証明書の検証を有効にするための Citrix ingress controller 構成を含む YAML ファイルのサンプルです。


kind: Pod
metadata:
  name: cic
  labels:
    app: cic
spec:
  serviceAccountName: cpx
  # Make secret available as a volume
  volumes:
  - name: certs
    secret:
      secretName: ciccacert
  containers:
  - name: cic
    image: "xxxx"
    imagePullPolicy: Always
    args: []
    # Mounting certs in a volume path
    volumeMounts:
    - name: certs
      mountPath: <Path to mount the certificate>
      readOnly: true
    env:
    # Set Citrix ADM Management IP
    - name: "NS_IP"
      value: "xx.xx.xx.xx"
    # Set port for Nitro
    - name: "NS_PORT"
      value: "xx"
    # Set Protocol for Nitro
    - name: "NS_PROTOCOL"
      # Enable HTTPS protocol for secure communication
      value: "HTTPS"
    # Set username for Nitro
    - name: "NS_USER"
      value: "nsroot"
    # Set user password for Nitro
    - name: "NS_PASSWORD"
      value: "nsroot"
    # Certificate validation configurations
    - name: "NS_VALIDATE_CERT"
      value: "yes"
    - name: "NS_CACERT_PATH"
      value: " <Mounted volume path>/myCA.pem"
<!--NeedCopy-->

YAML ファイルの例で指定されているように、Citrix ingress controller で証明書の検証を有効にするために必要な特定の変更を次に示します。

Kubernetes シークレットをボリュームとして設定する

  • secret で宣言されたボリュームセクションをソースとして設定します。ここで、secretNameは CA 証明書用に作成された Kubernetesシークレット名と一致する必要があります。

CA 証明書のボリュームマウント場所を構成する

  • ボリュームセクションのsecretNameセクションと同じ名前のvolumeMountsセクションを構成します。
  • CA証明書をマウントするmountPathディレクトリを宣言する
  • 音量を次のように設定します。ReadOnly

セキュアな通信を構成する

  • 環境変数NS_PROTOCOLを HTTPSとして設定します。
  • 環境変数NS_PORTを ADC HTTPSポートとして設定します。

CA 検証と証明書パスを有効にして構成する

  • 環境変数NS_VALIDATE_CERTyes (無効にするためno) に設定します。
  • 環境変数NS_CACERT_PATHをマウントパス (volumeMounts->MountPath)/PEM ファイル名 (シークレットの作成時に使用) として設定します。
Citrix イングレスコントローラーでCitrix ADC証明書の検証を有効にする