ユースケース
ここではIngress証明書の使用に関する内容をご紹介します。次のシナリオでIngress証明書の設定を行うことができます。
Ingress作成の際にHTTPSリスニングプロトコルを選択した場合、適切なサーバー証明書を選択することでアクセスのセキュリティを保証できます。
すべてのHTTPSドメイン名に同一の証明書をバインドすることで、Ingress下のすべてのHTTPSルールの証明書の設定が簡略化され、更新操作がよりスピーディーになります。
異なるドメイン名に異なる証明書をバインドすることで、サーバーとクライアントのSSL/TLSが改善します。
注意事項
Ingress証明書の設定はSecret形式で行う必要があります。Tencent Kubernetes Engine(TKE) Ingressはデフォルトで同名のSecretを作成し、その中に証明書IDが含まれています。
証明書を置き換えたい場合は、証明書プラットフォームで証明書を新規作成した後、Secretの証明書IDを更新することをお勧めします。クラスター内のコンポーネントの同期はSecretのステートメントに準じるため、他の証明書サービス、CLBサービス上で証明書を直接更新した場合、Secret内の内容に復元されます。
Secret証明書のリソースはIngressリソースと同一のNamespace下に配置する必要があります。
コンソールはデフォルトで同名のSecret証明書リソースを作成するため、同名のSecretリソースがすでに存在する場合はIngressを作成できません。
通常、Ingress作成の際には、Secretにバインドされた証明書リソースは再利用されません。ただし、Ingress作成時にSecretにバインドされた証明書リソースを再利用することはサポートされており、Secretの更新の際に、このSecretを参照するすべてのIngress証明書が同期更新されます。
ドメイン名に一致する証明書を追加すると、Cloud Load Balancer(CLB)のSNI機能が同期的に有効化されます(無効にすることはできません)。証明書に対応するドメイン名を削除すると、この証明書はIngressに対応するHTTPSドメイン名にデフォルトで一致します。
従来型CLBではドメイン名およびURLベースの転送はサポートしていません。従来型CLBで作成したIngressは複数の証明書の設定をサポートしていません。
事例
TKEではIngress内のspec.tlsフィールドによって、Ingress用に作成したCLB HTTPSリスナーに証明書を設定することができます。このうち、secretNameはTencent Cloud証明書IDを含むKubernetes Secretリソースです。次に例を示します。
Ingress
YAMLで作成します。
spec:
tls:
- hosts:
- www.abc.com
secretName: secret-tls-2
Secret
apiVersion: v1
stringData:
qcloud_cert_id: Xxxxxxxx
qcloud_ca_cert_id: Xxxxxxxx
kind: Secret
metadata:
name: tencent-com-cert
namespace: default
type: Opaque
「Secretの新規作成」ページで、Secretの主要パラメータを次のように設定します。
名前:ご自身で定義します。ここではcos-secretとします。
Secretタイプ:Opaqueを選択します。このタイプはキー証明書およびプロファイルの保存に適しています。ValueはBase64形式でエンコードされます。
効力の範囲:必要に応じて選択します。必ずIngressと同一のNamespace下にします。
内容:変数名はqcloud_cert_idと設定し、変数値にはサーバー証明書の対応する証明書IDを設定します。
注意
双方向証明書を設定したい場合、Secretには「サーバー証明書」のほかに「クライアントCA証明書」も追加する必要があります。この場合、このSecretにはさらにキーバリューペアも1つ追加する必要があり、その変数名はqcloud_ca_cert_idとし、変数値には「クライアントCA証明書」の対応する証明書IDを設定します。
Ingress証明書設定動作
単一のspec.secretNameのみ設定し、hostsを設定していない場合は、すべてのHTTPSの転送ルールにこの証明書が設定されます。次に例を示します。
spec:
tls:
- secretName: secret-tls
第1レベル汎用ドメイン名の統一設定をサポートしています。次に例を示します。
spec:
tls:
- hosts:
- *.abc.com
secretName: secret-tls
証明書と汎用ドメイン名証明書が同時に設定されている場合、1つの証明書を優先的に選択します。次の例では、www.abc.comはsecret-tls-2に記述された証明書を使用します。
spec:
tls:
- hosts:
- *.abc.com
secretName: secret-tls-1
- hosts:
- www.abc.com
secretName: secret-tls-2
複数の証明書をすでに使用しているIngressを更新する際、TKE Ingress controllerは以下の動作を行って判断します。
HTTPSのrules.hostに一致するものがない場合、不承認と判断されると更新は送信できません。
HTTPSのrules.hostが単一のTLSと一致する場合、更新を送信でき、かつこのhostにSecretに対応する証明書を設定することができます。
TLSのSecretNameを変更した場合はSecretNameが存在するかどうかのみを検証し、Secretの内容は検証しません。Secretが存在すれば更新を送信できます。
注意
Secret内の証明書IDが要件に適合することを確認してください。
操作手順
コンソールでのサーバー証明書の新規作成
説明
設定したい証明書をすでにお持ちの場合はこの手順をスキップしてください。
1. CLBコンソールにログインし、左側ナビゲーションバーの証明書管理を選択します。 2. 「証明書管理」ページで、新規作成をクリックします。
3. ポップアップした「証明書の新規作成」ウィンドウで、次の情報を参照して設定します。
証明書名:カスタム設定します。
証明書タイプ:「サーバー証明書」を選択します。サーバー証明書とはSSL証明書(SSL Certificates)のことです。SSL証明書に基づいてサイトを HTTP(Hypertext Transfer Protocol)から HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)に切り替えることができます。つまり、SSL(Secure Socket Layer)に基づいてセキュアなデータ伝送を行うための暗号化版 HTTPプロトコルです。
4. 送信をクリックすると作成が完了します。
証明書を使用したIngressオブジェクトの作成
注意事項:
コンソールで作成したIngressでHTTPSサービスを有効化すると、証明書IDを保存するための同名のSecretリソースがまず作成されます。IngressではこのSecretが使用され、リスニングされます。
TLS設定ドメイン名と証明書の対応関係は次のとおりです。
第1レベル汎用ドメイン名の統一設定を使用できます。
ドメイン名に一致する複数の異なる証明書がある場合は、1つの証明書がランダムに選択されます。同一のドメイン名に異なる証明書を使用することは推奨しません。
作成が承認されるには、すべてのHTTPSドメイン名に証明書が設定されている必要があります。
操作手順:
Ingressの作成を参照してIngressの新規作成を行います。リスニングポートはHttps:443にチェックを入れます。 証明書の変更
注意事項:
証明書を変更したい場合、この証明書を使用しているすべてのIngressを確認してください。ユーザーの複数のIngress設定に同一のSecretリソースが使用されている場合、これらのIngressが対応するCLBの証明書が同期的に変更されます。
証明書はSecretの変更によって変更する必要があります。Secretの内容にはご使用中のTencent Cloud証明書のIDが含まれます。
操作手順:
1. 次のコマンドを実行し、デフォルトエディタを使用して変更したいSecretを開きます。[secret-name]は変更したいSecretの名前に置き換える必要があります。
kubectl edit secrets [secret-name]
2. Secretリソースを変更し、qcloud_cert_idの値を新しい証明書IDに変更します。
Secretの作成と異なり、Secret証明書IDの変更にはBase64エンコードが必要です。実際のニーズに応じて、Base64手動エンコードか、stringData`を指定して行うBase64自動エンコードのどちらかを選択します。
Ingressオブジェクトの更新
1. TKEコンソールにログインし、左側ナビゲーションバーのクラスターを選択します。 2. 「クラスター管理」ページで、変更したいIngressのクラスターIDを選択します。
3. クラスター詳細ページで、左側のサービスとルーティング > Ingressを選択します。下図をご参照ください。 4. ターゲットのIngressがある行の右側の転送設定の更新をクリックします。
5. 「転送設定の更新」ページで、実際の状況に応じて転送設定ルールの更新を行います。
6. 転送設定の更新をクリックすると更新操作が完了します。
次のコマンドを実行し、デフォルトエディタを使用して変更したいingressを開き、yamlファイルを変更して保存すれば更新操作は完了です。
kubectl edit ingress <ingressname> -n <namespaces>