証明書のカスタマイズ
Verrazzanoは、外部クライアントからのアクセスを保護してシステム・エンドポイントを保護する証明書を発行します。
認証局(CA)からの証明書は、次のいずれかの方法でエンドポイント証明書を発行するように構成する必要があります:
- Verrazzanoが自己署名CAを生成します(デフォルト)。
- 指定したCAを構成します。
- LetsEncryptを証明書発行者として構成します(OCI DNSが必要です)。
いずれの場合も、VerrazzanoはCertManagerを使用して証明書の作成を管理します。
ノート
自己署名認証局は、信頼された機関によって署名されていない証明書を生成します。通常は、本番環境では使用されません。Verrazzanoの自己署名CAの使用
デフォルトでは、Verrazzanoは独自の自己署名CAを作成します。構成は必要ありません。
カスタムCAの使用
独自のCAを指定する場合は、次を実行する必要があります:
-
(オプション)独自の署名キー・ペアとCA証明書を作成します。
たとえば、
openssl
CLIを使用して、nip.io
ドメインのキー・ペアを作成できます:# Generate a CA private key $ openssl genrsa -out tls.key 2048 # Create a self signed certificate, valid for 10yrs with the 'signing' option set $ openssl req -x509 -new -nodes -key tls.key -subj "/CN=*.nip.io" -days 3650 -reqexts v3_req -extensions v3_ca -out tls.crt
これらのコマンドの出力は、署名キー・ペアのキーと証明書である
tls.key
およびtls.crt
の2つのファイルになります。これらのファイルには、次のステップの方法で名前を付ける必要があります。独自のキー・ペアをすでに生成している場合は、秘密キーと証明書にそれぞれ
tls.key
およびtls.crt
という名前を付ける必要があります。発行者が中間者を表している場合は、tls.crt
に発行者の完全なチェーンが正しい順序で含まれていることを確認してください。独自のCAの指定の詳細は、CertManager CAのドキュメントを参照してください。
-
署名キー・ペアをKubernetesシークレットとして保存します。
$ kubectl create ns mynamespace $ kubectl create secret tls myca --namespace=mynamespace --cert=tls.crt --key=tls.key
-
Verrazzanoカスタム・リソースでシークレット名とネームスペースの場所を指定します。
Verrazzanoカスタム・リソースの
spec.components.certManager.certificate.ca
の次のフィールドを使用して、カスタムCAシークレットをCertManagerに指定する必要があります:spec.components.certManager.certificate.ca.secretName
spec.components.certManager.certificate.ca.clusterResourceNamespace
たとえば、ネームスペースmynamespace
にmyca
という名前のCAシークレットを作成した場合、次のように構成します:
apiVersion: install.verrazzano.io/v1alpha1
kind: Verrazzano
metadata:
name: custom-ca-example
spec:
profile: dev
components:
certManager:
certificate:
ca:
secretName: myca
clusterResourceNamespace: mynamespace
LetsEncrypt証明書の使用
LetsEncryptによって生成された証明書を使用するようにVerrazzanoを構成できます。LetsEncryptはACMEプロトコルを実装しており、信頼できる機関によって署名された証明書の自動発行の標準プロトコルを提供します。これは、Verrazzanoカスタム・リソースのspec.components.certManager.certificate.acme
フィールドを介して管理されます。
ノート
証明書にLetsEncryptを使用するには、DNS管理にOCI DNSを使用する必要もあります。詳細は、DNSのカスタマイズのページを参照してください。LetsEncryptを証明書プロバイダとして使用するようにCertManagerを構成するには、Verrazzanoカスタム・リソースで次の値を使用してCertManager ACMEプロバイダを構成する必要があります:
spec.components.certManager.certificate.acme.provider
フィールドをletsEncrypt
に設定します。spec.components.certManager.certificate.acme.emailAddress
フィールドをletsEncrypt
アカウントの有効な電子メール・アドレスに設定します。- (オプション)
spec.components.certManager.certificate.acme.environment
フィールドをstaging
またはproduction
(デフォルト)に設定します。
次の例では、LetsEncrypt production
環境(デフォルト)を使用し、DNSレコード管理にOCI DNSを使用するようにVerrazzanoを構成します:
apiVersion: install.verrazzano.io/v1alpha1
kind: Verrazzano
metadata:
name: letsencrypt-certs-example
spec:
profile: dev
components:
certManager:
certificate:
acme:
provider: letsEncrypt
emailAddress: jane.doe@mycompany.com
dns:
oci:
ociConfigSecret: oci
dnsZoneCompartmentOCID: ocid1.compartment.oc1.....
dnsZoneOCID: ocid1.dns-zone.oc1.....
dnsZoneName: example.com
次の例では、LetsEncrypt staging
環境およびOCI DNSを使用するようにVerrazzanoを構成します:
apiVersion: install.verrazzano.io/v1alpha1
kind: Verrazzano
metadata:
name: letsencrypt-certs-example
spec:
profile: dev
components:
certManager:
certificate:
acme:
provider: letsEncrypt
emailAddress: jane.doe@mycompany.com
environment: staging
dns:
oci:
ociConfigSecret: oci
dnsZoneCompartmentOCID: ocid1.compartment.oc1.....
dnsZoneOCID: ocid1.dns-zone.oc1.....
dnsZoneName: example.com
ノート
LetsEncryptstaging
環境によって発行された証明書は、自己署名証明書と同様に、信頼されていない認証局によって署名されます。通常、本番環境では使用されません。
LetsEncryptのステージングと本番の比較
LetsEncryptは、生成した証明書のレート制限を提供し、すべてのクライアントでの公正な使用を保証します。production
環境の制限は、Verrazzanoが頻繁にインストールまたは再インストールされる環境(テスト環境など)で、より頻繁に超過する可能性があります。これにより、証明書生成でのレート制限例外のためにインストールが失敗する可能性があります。
このような環境では、production
環境よりも制限値が大幅に高いLetsEncrypt staging
環境を使用する方が適切です。また、テスト環境では、LetsEncryptレート制限を完全に回避するためには、自己署名CAの方がより適切な場合もあります。