- オプション 1: cert-manager と Let’s Encrypt
- オプション2:独自のワイルドカード証明書を使用
- オプション 3: サービスごとに個別の証明書を使用
- オプション4:自動生成された自己署名ワイルドカード証明書を使う
- GitLab PagesのTLS要件
- トラブルシューティング
GitLabチャートのTLS設定
このChartはNGINX Ingress Controllerを使ってTLSターミネーションを行うことができます。デプロイ用に TLS 証明書を取得する方法を選択できます。詳細はIngressのグローバル設定に記載されています。
オプション 1: cert-manager と Let’s Encrypt
Let’s Encrypt は無料で自動化されたオープンな作成者です。証明書は様々なツールを使って自動的に要求することができます。このChartは、一般的な選択肢であるcert-managerとインテグレーションする準備ができています。
すでにcert-managerを使用している場合は、global.ingress.annotations
、cert-managerのデプロイに適切なアノテーションを設定できます。
クラスターにまだcert-managerがインストールされていない場合は、このChartの依存関係としてインストールして設定できます。
内部cert-managerとIssuer
helm repo update
helm dep update
helm install gitlab gitlab/gitlab \
--set certmanager-issuer.email=you@example.com
cert-manager
のインストールはcertmanager.install
設定で制御され、Chart での使用はglobal.ingress.configureCertmanager
設定で制御されます。どちらもデフォルトではtrue
、デフォルトでは発行者の電子メールのみを提供する必要があります。
外部cert-managerと内部Issuer
このChartの一部として、外部cert-manager
、発行者を提供することも可能です。
helm install gitlab gitlab/gitlab \
--set certmanager.install=false \
--set certmanager-issuer.email=you@example.com \
--set global.ingress.annotations."kubernetes\.io/tls-acme"=true
外部の証明書管理者と発行者(外部)
外部のcert-manager
とIssuer
リソースを利用するには、自己署名証明書が有効にならないように、いくつかの項目を提供する必要があります。
- 外部
cert-manager
をアクティブにするためのアノテーション(詳しくはドキュメントをご覧ください) - 各サービスのTLSシークレットの名前(これは自己署名ビヘイビアを非アクティブにします)
helm install gitlab gitlab/gitlab \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false \
--set global.ingress.annotations."kubernetes\.io/tls-acme"=true \
--set gitlab.webservice.ingress.tls.secretName=RELEASE-gitlab-tls \
--set registry.ingress.tls.secretName=RELEASE-registry-tls \
--set minio.ingress.tls.secretName=RELEASE-minio-tls \
--set gitlab.kas.ingress.tls.secretName=RELEASE-kas-tls
オプション2:独自のワイルドカード証明書を使用
フルチェーン証明書と鍵をSecret
としてクラスターに追加します:
kubectl create secret tls <tls-secret-name> --cert=<path/to-full-chain.crt> --key=<path/to.key>
以下のオプションを含めます。
helm install gitlab gitlab/gitlab \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false \
--set global.ingress.tls.secretName=<tls-secret-name>
証明書の管理にAWS ACMを使用
AWS ACM を使用してワイルドカード証明書を作成する場合、ACM 証明書はダウンロードできないため、シークレットで指定することはできません。代わりにnginx-ingress.controller.service.annotations
で指定します:
nginx-ingress:
controller:
service:
annotations:
...
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
オプション 3: サービスごとに個別の証明書を使用
フルチェーン証明書をシークレットとしてクラスターに追加し、そのシークレット名を各Ingressに渡します。
helm install gitlab gitlab/gitlab \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false \
--set global.ingress.tls.enabled=true \
--set gitlab.webservice.ingress.tls.secretName=RELEASE-gitlab-tls \
--set registry.ingress.tls.secretName=RELEASE-registry-tls \
--set minio.ingress.tls.secretName=RELEASE-minio-tls \
--set gitlab.kas.ingress.tls.secretName=RELEASE-kas-tls
オプション4:自動生成された自己署名ワイルドカード証明書を使う
これらのChartは、自動生成された自己署名ワイルドカード証明書を提供する機能も提供します。これは、Let’s Encryptは使えないがSSLによるセキュリティが必要な環境で有用です。この機能はshared-secretsジョブによって提供されます。
注意:
gitlab-runner
Chart は自己署名証明書では正しく機能しません。以下に示すように、無効にすることをお勧めします。
helm install gitlab gitlab/gitlab \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false \
--set gitlab-runner.install=false
shared-secrets
ジョブは、CA 証明書、ワイルドカード証明書、およびすべての外部アクセス可能なサービスで使用する証明書チェーンを生成します。これらを含むシークレットはRELEASE-wildcard-tls
、RELEASE-wildcard-tls-ca
、RELEASE-wildcard-tls-chain
となります。RELEASE-wildcard-tls-ca
には公開CA証明書が含まれ、デプロイされたGitLabインスタンスにアクセスするユーザーやシステムに配布することができます。RELEASE-wildcard-tls-chain
には CA 証明書とワイルドカード証明書の両方が含まれており、gitlab-runner.certsSecretName=RELEASE-wildcard-tls-chain
を介して GitLab Runner に直接使用することもできます。
GitLab PagesのTLS要件
TLSをサポートするGitLab Pagesでは、*.<pages domain>
(<pages domain>
のデフォルト値はpages.<base domain>
)に該当するワイルドカード証明書が必要です。
ワイルドカード証明書が必要なため、cert-managerやLet’s Encryptでは自動的に作成することができません。そのため、cert-managerはGitLab Pagesではデフォルトで無効になっています(gitlab-pages.ingress.configureCertmanager
)。そのため、ワイルドカード証明書を含むk8s Secretを自分で用意する必要があります。global.ingress.annotations
を使って外部の cert-manager を設定している場合は、gitlab-pages.ingress.annotations
でそのようなアノテーションを上書きする必要があります。
デフォルトでは、このシークレットの名前は<RELEASE>-pages-tls
です。gitlab.gitlab-pages.ingress.tls.secretName
の設定で別の名前を指定できます:
helm install gitlab gitlab/gitlab \
--set global.pages.enabled=true \
--set gitlab.gitlab-pages.ingress.tls.secretName=<secret name>
トラブルシューティング
このセクションでは、遭遇する可能性のある問題の解決策を説明します。
SSL終了エラー
Let’s EncryptをTLSプロバイダとして使用していて、証明書関連のエラーに直面した場合、デバッグするためのいくつかのオプションがあります:
- letsdebugを使ってドメインにエラーがないか確認してください。
-
letsdebugがエラーを返さない場合は、cert-managerに関連する問題があるかどうかを確認してください:
kubectl describe certificate,order,challenge --all-namespaces
エラーが表示された場合は、証明書オブジェクトを削除して、新しい証明書を強制的に要求してみてください。
- 上記のいずれもうまくいかない場合は、cert-managerの再インストールを検討してください。