5.3. OpenShift クラスター内から Service Registry への HTTPS 接続の設定

以下の手順では、OpenShift クラスター内から HTTPS 接続のポートを公開するように Service Registry デプロイメントを設定する方法を説明します。

警告

このような接続は、クラスター外部で直接利用できません。ルーティングはホスト名に基づいており、HTTPS 接続の場合はエンコードされます。そのため、エッジターミネーションまたはその他の設定は必要です。「OpenShift クラスター外から Service Registry への HTTPS 接続の設定」 を参照してください。

前提条件

  • Service Registry Operator がインストールされている。

手順

  1. 自己署名証明書を使用して keystore を生成します。独自の証明書を使用している場合は、この手順を省略できます。

    keytool -genkey -trustcacerts -keyalg RSA -keystore registry-keystore.jks -storepass password
  2. キーストアおよびキーストアのパスワードを保持する新しいシークレットを作成します。

    1. OpenShift Web コンソールの左側のナビゲーションメニューで、Workloads > Secrets > Create Key/Value Secret とクリックします。
    2. 以下の値を使用します。
      Name: registry-keystore
      Key 1: keystore.jks
      Value 1: registry-keystore.jks (アップロードしたファイル)
      Key 2: password
      Value 2: password

      注記

      java.io.IOException: Invalid keystore format が発生した場合、バイナリーファイルのアップロードが正常に行われていません。代わりに、cat registry-keystore.jks | base64 -w0 > data.txt を使用してファイルを base64 文字列としてエンコードし、Secret リソースを yaml として編集して、エンコードされたファイルを手動で追加します。

  3. Service Registry インスタンスの Deployment リソースを編集します。Service Registry Operator の status フィールドで正しい名前を見つけることができます。

    1. キーストアシークレットをボリュームとして追加します。

      template:
        spec:
          volumes:
          - name: registry-keystore-secret-volume
            secret:
            secretName: registry-keystore
    2. ボリュームマウントを追加します。

      volumeMounts:
        - name: registry-keystore-secret-volume
          mountPath: /etc/registry-keystore
          readOnly: true
    3. JAVA_OPTIONS および KEYSTORE_PASSWORD環境変数を追加します。

      - name: KEYSTORE_PASSWORD
        valueFrom:
          secretKeyRef:
            name: registry-keystore
            key: password
      - name: JAVA_OPTIONS
          value: >-
           -Dquarkus.http.ssl.certificate.key-store-file=/etc/registry-keystore/keystore.jks
           -Dquarkus.http.ssl.certificate.key-store-file-type=jks
           -Dquarkus.http.ssl.certificate.key-store-password=$(KEYSTORE_PASSWORD)
      注記

      順序は、文字列の補間を使用する場合に重要です。

    4. HTTPS ポートを有効にします。

      ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 8443
          protocol: TCP
  4. Service Registry インスタンスの Service リソースを編集します。Service Registry Operator の status フィールドで正しい名前を見つけることができます。

    ports:
      - name: http
        protocol: TCP
        port: 8080
        targetPort: 8080
      - name: https
        protocol: TCP
        port: 8443
        targetPort: 8443
  5. 接続が機能していることを確認します。

    1. SSH を使用してクラスターの Pod に接続します (Service Registry Pod を使用できます)。

      oc rsh -n default example-apicurioregistry-deployment-vx28s-4-lmtqb
    2. Serviceリソースから Service Registry Pod のクラスター IP を見つけます (Web コンソールの Location 列を参照)。その後、テスト要求を実行します (自己署名証明書を使用するので、セキュアでないフラグが必要になります)。

      curl -k https://172.30.209.198:8443/health
      [...]