1.4. 高度なルートの作成
複数のタイプの TLS 終端を使用してクライアントに証明書を提供できます。以下のセクションでは、カスタム証明書を使用して re-encrypt、edge、および passthrough ルートを作成する方法を説明します。
1.4.1. カスタム証明書を使用した edge ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
oc create route コマンドを使用し、edge TLS termination とカスタム証明書を使用してセキュアなルートを設定できます。edge ルートの場合、Ingress Controller は、トラフィックを宛先 Pod に転送する前に TLS 暗号を終了します。ルートは、Ingress Controller がルートに使用する TLS 証明書およびキーを指定します。
この手順では、カスタム証明書および edge TLS termination を使用して Route リソースを作成します。以下では、証明書/キーのペアが現在の作業ディレクトリーの tls.crt および tls.key ファイルにあることを前提としています。必要な場合には、証明書チェーンを完了するために CA 証明書を指定することもできます。tls.crt、tls.key、および (オプションで) ca.crt を実際のパス名に置き換えます。frontend を、公開する必要のあるサービスの名前に置き換えます。www.example.com を適切な名前に置き換えます。
前提条件
- PEM エンコードされたファイルに証明書/キーのペアが必要です。ここで、証明書はルートホストに対して有効となっています。
- 証明書チェーンを完了する PEM エンコードされたファイルの別の CA 証明書が必要です。
- 公開する必要のあるサービスが必要です。
パスワードで保護されるキーファイルはサポートされません。キーファイルからパスフレーズを削除するには、以下のコマンドを使用します。
openssl rsa -in password_protected_tls.key -out tls.key
$ openssl rsa -in password_protected_tls.key -out tls.key
手順
edge TLS termination およびカスタム証明書を使用して、セキュアな
Routeリソースを作成します。oc create route edge --service=frontend --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=www.example.com
$ oc create route edge --service=frontend --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=www.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果として生成される
Routeリソースを検査すると、以下のようになります。セキュアなルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 他のオプションは、
oc create route edge --helpを参照してください。
1.4.2. カスタム証明書を使用した re-encrypt ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
oc create route コマンドを使用し、カスタム証明書と共に re-encrypt TLS termination を使用してセキュアなルートを設定できます。
この手順では、カスタム証明書および reencrypt TLS termination を使用して Route リソースを作成します。以下では、証明書/キーのペアが現在の作業ディレクトリーの tls.crt および tls.key ファイルにあることを前提としています。また、Ingress Controller がサービスの証明書を信頼できるように宛先 CA 証明書を指定する必要もあります。必要な場合には、証明書チェーンを完了するために CA 証明書を指定することもできます。tls.crt、tls.key、cacert.crt、および (オプションで) ca.crt を実際のパス名に置き換えます。frontend を、公開する必要のある Service リソースに置き換えます。www.example.com を適切な名前に置き換えます。
前提条件
- PEM エンコードされたファイルに証明書/キーのペアが必要です。ここで、証明書はルートホストに対して有効となっています。
- 証明書チェーンを完了する PEM エンコードされたファイルの別の CA 証明書が必要です。
- PEM エンコードされたファイルの別の宛先 CA 証明書が必要です。
- 公開する必要のあるサービスが必要です。
パスワードで保護されるキーファイルはサポートされません。キーファイルからパスフレーズを削除するには、以下のコマンドを使用します。
openssl rsa -in password_protected_tls.key -out tls.key
$ openssl rsa -in password_protected_tls.key -out tls.key
手順
reencrypt TLS 終端およびカスタム証明書を使用してセキュアな
Routeリソースを作成します。oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.com
$ oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果として生成される
Routeリソースを検査すると、以下のようになります。セキュアなルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 他のオプションは、
oc create route reencrypt --helpを参照してください。
1.4.3. passthrough ルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
oc create route コマンドを使用して、passthrough 終端を使用したセキュアなルートを設定できます。passthrough 終端では、ルーターが TLS 終端を提供せずに、暗号化されたトラフィックが宛先に直接送信されます。したがって、ルート上に鍵や証明書は必要ありません。
前提条件
- 公開する必要のあるサービスが必要です。
手順
Routeリソースを作成します。oc create route passthrough route-passthrough-secured --service=frontend --port=8080
$ oc create route passthrough route-passthrough-secured --service=frontend --port=8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow 結果として生成される
Routeリソースを検査すると、以下のようになります。passthrough 終端を使用したセキュアなルート
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 宛先 Pod は、エンドポイントでトラフィックに証明書を提供します。これは、必須となるクライアント証明書をサポートするための唯一の方法です (相互認証とも呼ばれる)。
1.4.4. Ingress アノテーションでの宛先 CA 証明書を使用したルート作成 リンクのコピーリンクがクリップボードにコピーされました!
route.openshift.io/destination-ca-certificate-secret アノテーションを Ingress オブジェクトで使用して、カスタム宛先 CA 証明書でルートを定義できます。
前提条件
- PEM エンコードされたファイルで証明書/キーのペアを持つことができます。ここで、証明書はルートホストに対して有効となっています。
- 証明書チェーンを完了する PEM エンコードされたファイルの別の CA 証明書が必要です。
- PEM エンコードされたファイルの別の宛先 CA 証明書が必要です。
- 公開する必要のあるサービスが必要です。
手順
次のコマンドを入力して、宛先 CA 証明書のシークレットを作成します。
oc create secret generic dest-ca-cert --from-file=tls.crt=<file_path>
$ oc create secret generic dest-ca-cert --from-file=tls.crt=<file_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc -n test-ns create secret generic dest-ca-cert --from-file=tls.crt=tls.crt
$ oc -n test-ns create secret generic dest-ca-cert --from-file=tls.crt=tls.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/dest-ca-cert created
secret/dest-ca-cert createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow route.openshift.io/destination-ca-certificate-secretを Ingress アノテーションに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- アノテーションは kubernetes シークレットを参照します。
このアノテーションで参照されているシークレットは、生成されたルートに挿入されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.5. 外部管理証明書を使用したルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
ルート API の .spec.tls.externalCertificate フィールドを使用して、サードパーティーの証明書管理ソリューションで OpenShift Container Platform ルートを設定できます。シークレットを介して外部で管理されている TLS 証明書を参照できるため、手動での証明書管理が不要になります。
外部で管理されている証明書を使用すると、エラーを減らし、証明書の更新のスムーズなロールアウトを確保し、OpenShift ルーターが更新された証明書を迅速に提供できるようになります。外部で管理された証明書は、edge ルートと re-encrypt ルートの両方で使用できます。
前提条件
-
tlsタイプの有効な証明書またはキーペアを含むシークレットが必要です。コマンド例:.keyキーとtls.crtキーの両方を含む、PEM でエンコードされた$ oc create secret tls myapp-tls --cert=server.crt --key=server.key.
手順
以下のコマンドを実行して、シークレットと同じ namespace に
ロールオブジェクトを作成し、ルーターのサービスアカウントの読み取りアクセスを許可するようにします。oc create role secret-reader --verb=get,list,watch --resource=secrets --resource-name=<secret-name> \ --namespace=<current-namespace>
$ oc create role secret-reader --verb=get,list,watch --resource=secrets --resource-name=<secret-name> \ --namespace=<current-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<secret-name>: シークレットの実際の名前を指定します。 -
<current-namespace>: シークレットとルートの両方が存在する namespace を指定します。
-
以下のコマンドを実行して、シークレットと同じ namespace に
rolebindingオブジェクトを作成し、ルーターサービスアカウントを新たに作成されたロールにバインドします。oc create rolebinding secret-reader-binding --role=secret-reader --serviceaccount=openshift-ingress:router --namespace=<current-namespace>
$ oc create rolebinding secret-reader-binding --role=secret-reader --serviceaccount=openshift-ingress:router --namespace=<current-namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<current-namespace>: シークレットとルートの両方が存在する namespace を指定します。
-
次の例を使用して、
routeを定義し、証明書を含むシークレットを指定する YAML ファイルを作成します。セキュアなルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<secret-name>: シークレットの実際の名前を指定します。
-
次のコマンドを実行して
routeリソースを作成します。oc apply -f <route.yaml>
$ oc apply -f <route.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;route.yaml>: 生成された YAML ファイル名を指定します。シークレットが存在し、証明書/キーペアがある場合、すべての前提条件が満たされていれば、ルーターは生成された証明書を提供します。
注記.spec.tls.externalCertificateが指定されていない場合、ルーターはデフォルトの生成された証明書を使用します。.spec.tls.externalCertificateフィールドを使用する場合は、.spec.tls.certificateフィールドまたは.spec.tls.keyフィールドを指定することはできません。
1.4.6. Ingress オブジェクトを介してデフォルトの証明書を使用してルートを作成する リンクのコピーリンクがクリップボードにコピーされました!
TLS 設定を指定せずに Ingress オブジェクトを作成すると、OpenShift Container Platform は安全でないルートを生成します。デフォルトの Ingress 証明書を使用してセキュアな edge 終端ルートを生成する Ingress オブジェクトを作成するには、次のように空の TLS 設定を指定できます。
前提条件
- 公開したいサービスがあります。
-
OpenShift CLI (
oc) にアクセスできる。
手順
Ingress オブジェクトの YAML ファイルを作成します。この例では、ファイルの名前は
example-ingress.yamlです。Ingress オブジェクトの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この正確な構文を使用して、カスタム証明書を指定せずに TLS を指定します。
次のコマンドを実行して、Ingress オブジェクトを作成します。
oc create -f example-ingress.yaml
$ oc create -f example-ingress.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、OpenShift Container Platform が Ingress オブジェクトの予期されるルートを作成したことを確認します。
oc get routes -o yaml
$ oc get routes -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow