7.4. ホステッドクラスターの OAuth サーバー証明書の設定
ホスト型クラスターにアクセスするために信頼済み証明書認証局 (CA) の証明書を使用する場合は、OAuth サーバー証明書を設定できます。
前提条件
- 実行中のホステッドクラスターがある。
-
あなたは管理クラスターへの
cluster-admin権限を持っています。 -
HostedClusterリソースを変更するためのアクセス権がある。 ホステッドクラスター名前空間には、署名済み証明書と秘密鍵を含む TLS シークレットがあり、以下の鍵が含まれています。
-
tls.crt -
tls.key
-
手順
ホステッドクラスター名前空間を特定してください。
以下のコマンドを入力して、ホステッドクラスターが実行されている名前空間をエクスポートします。
$ export HC_NAMESPACE=<hosted_cluster_namespace>以下のコマンドを入力して、ホステッドクラスター名をエクスポートします。
$ export CLUSTER_NAME=<hosted_cluster_name>
以下のコマンドを入力して、簡単なテスト証明書を生成します。
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout tls.key \ -out tls.crt \ -subj "/CN=openshift-oauth" \ -addext "subjectAltName=DNS:oauth-${HC_NAMESPACE}-${CLUSTER_NAME}.api-custom-cert-sample-hosted.sample-hosted.example.com"api-custom-cert-sample-hosted.sample-hosted.example.comという値は、コマンド内およびこの手順の残りの部分全体を通して例として使用されます。注記この例では、プレースホルダーのホスト名を使用しています。この手順の後半で OAuth ルートを特定したら、
HostedClusterリソースを編集する前に、正しいホスト名を使用してこの証明書を再生成する必要があります。以下のコマンドを入力して、ファイルが存在することを確認してください。
$ ls tls.crt tls.keyホステッドクラスター名前空間に TLS シークレットをまだ作成していない場合は、次のコマンドを入力してシークレットを作成してください。
$ oc create secret tls my-oauth-cert-secret \ --cert=path/to/tls.crt \ --key=path/to/tls.key \ -n $HC_NAMESPACE出力例
secret/my-oauth-cert-secret created注記OAuth サーバーは Hosted Control Plane 名前空間で動作しますが、証明書はホステッドクラスター名前空間に存在する必要があります。Hosted Control Plane 名前空間で作成されたシークレットは取得されません。
正しい OAuth ルートを見つけましょう:
管理クラスターの
kubconfigファイルを使用して、次のコマンドを入力します。$ oc get routes -n ${HC_NAMESPACE}-${CLUSTER_NAME}ルート名が
oauthの場合は、以下のコマンドを入力して確認してください。$ oc get route oauth -n ${HC_NAMESPACE}-${CLUSTER_NAME} -o yaml以下のコマンドを入力して、OAuth ルートホストを抽出する準備をします。
OAUTH_HOST=$(oc get route oauth \ -n ${HC_NAMESPACE}-${CLUSTER_NAME} \ -o jsonpath='{.spec.host}')以下のコマンドを入力して、OAuth ルートホストを抽出します。
$ echo "${OAUTH_HOST}"出力例
oauth-${HC_NAMESPACE}-${CLUSTER_NAME}.api-custom-cert-sample-hosted.sample-hosted.example.com
HostedClusterリソースを編集します。以下のコマンドを入力して、
HostedClusterリソースを編集用に開きます。$ oc edit hostedcluster $CLUSTER_NAME -n $HC_NAMESPACEリソース内で、
spec.configuration.apiServerセクションにservingCerts.namedCertificatesスタンザを追加して、名前付き証明書を設定します。apiVersion: hypershift.openshift.io/v1beta1 kind: HostedCluster metadata: name: <hosted_cluster_name> namespace: <hosted_cluster_namespace> spec: configuration: apiServer: audit: profile: Default servingCerts: namedCertificates: - names: - api-custom-cert-sample-hosted.sample-hosted.example.com servingCertificate: name: my-oauth-cert-secret # ...ここでは、以下のようになります。
spec.configuration.apiServer.servingCerts.namedCertificates.names- OAuth ルートの実際のホスト名を指定します。
spec.configuration.apiServer.servingCerts.servingCertificate.name- TLS シークレットの名前を指定します。この秘密鍵はホステッドクラスター名前空間内に存在しなければなりません。
変更を保存して適用してください。Control Plane Operator は変更を調整し、設定は制御プレーンに伝播され、OAuth サーバーは新しい証明書の提供を開始します。
重要ホステッドクラスターには、OAuth 証明書の設定フィールドは別途存在しません。
検証
ルートによって提供される証明書を確認するには、次のコマンドを入力してください。
$ echo | openssl s_client \ -connect "${OAUTH_HOST}:443" \ -servername "${OAUTH_HOST}" \ 2>/dev/null \ | openssl x509 -noout -subject -issuer -ext subjectAltName出力例
subject=CN=openshift-oauth issuer=CN=openshift-oauth X509v3 Subject Alternative Name: DNS:oauth-${HC_NAMESPACE}-${CLUSTER_NAME}.api-custom-cert-sample-hosted.sample-hosted.example.com出力結果から、OAuth ルートがカスタム証明書を提供しており、その証明書は
my-oauth-cert-secretというシークレットから取得されていることがわかります。