秘密
GitLabのオペレーションには様々な秘密が必要です:
GitLab コンポーネント:
- レジストリ認証証明書
- GitLabシェル用のSSHホストキーと証明書
- 個々のGitLabサービスのパスワード
オプションの外部サービス:
- SMTPサーバー
- ライトウェイトディレクトリアクセスプロトコル
- オムニオート
- 受信メールの IMAP (mail_room サービス経由)
- サービスデスクの電子メール用IMAP(mail_roomサービス経由)
- S/MIME 証明書
HTTPS 証明書の自動生成は Let’s Encrypt が提供します。
自動生成された秘密を利用するには、次の手順に進みます。
独自の秘密を指定するには、手動の秘密作成に進んでください。
秘密の手動作成(オプション)
このドキュメントの前のステップに従った場合は、リリース名としてgitlab
を使用してください。
レジストリ認証証明書
GitLabとレジストリ間の通信はIngressの背後で行われるので、ほとんどの場合、この通信には自己署名証明書を使えば十分です。 このトラフィックがネットワーク上に公開される場合は、公開された有効な証明書を生成する必要があります。
以下の例では、自己署名証明書が必要な場合を想定しています。
証明書と鍵のペアを生成します:
mkdir -p certs
openssl req -new -newkey rsa:4096 -subj "/CN=gitlab-issuer" -nodes -x509 -keyout certs/registry-example-com.key -out certs/registry-example-com.crt
これらの証明書を含むシークレットを作成します。<name>-registry-secret
シークレットの内部にregistry-auth.key
とregistry-auth.crt
鍵を作成します。<name>
はリリース名に置き換えてください。
kubectl create secret generic <name>-registry-secret --from-file=registry-auth.key=certs/registry-example-com.key --from-file=registry-auth.crt=certs/registry-example-com.crt
この秘密はglobal.registry.certificate.secret
の設定で参照されます。
レジストリ機密通知ヘッダ
詳細については、レジストリ通知の設定に関するドキュメントを参照してください。
シークレットコンテンツはアイテムのリストであるべきです。 コンテンツが単なる文字列の場合、Chartは必要に応じてそれをリストに変換しません。
RandomFooBar
という値を持つregistry-authorization-header
シークレットが作成された例を考えてみましょう。
kubectl create secret generic registry-authorization-header --from-literal="value=[RandomFooBar]"
デフォルトでは、secret内で使用されるキーは “value “です。しかし、ユーザーは別のキーを使用することができますが、ヘッダーマップアイテムの下でkey
。
SSHホストキー
OpenSSH 証明書と鍵のペアを生成します:
mkdir -p hostKeys
ssh-keygen -t rsa -f hostKeys/ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f hostKeys/ssh_host_dsa_key -N ""
ssh-keygen -t ecdsa -f hostKeys/ssh_host_ecdsa_key -N ""
ssh-keygen -t ed25519 -f hostKeys/ssh_host_ed25519_key -N ""
<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-gitlab-shell-host-keys --from-file hostKeys
この秘密はglobal.shell.hostKeys.secret
の設定で参照されます。
初期エンタープライズライセンス
GitLabインスタンスのEnterpriseライセンスを保存するためのKubernetesシークレットを作成します。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-gitlab-license --from-file=license=/tmp/license.gitlab
その後、--set global.gitlab.license.secret=<name>-gitlab-license
を使って、コンフィギュレーションにライセンスを注入します。
また、global.gitlab.license.key
オプションを使用して、ライセンスシークレットのライセンスを指すデフォルトのlicense
キーを変更することもできます。
初期ルートパスワード
初期rootパスワードを保存するためのKubernetesシークレットを作成します。 パスワードは少なくとも6文字以上にする必要があります。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-gitlab-initial-root-password --from-literal=password=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32)
Redisのパスワード
Redisのランダムな64文字の英数字のパスワードを生成します。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-redis-secret --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)
既存のRedisクラスターでデプロイする場合は、Redisクラスターにアクセスするためのパスワードをランダムに生成するのではなく、base64エンコードしたものを使用してください。
GitLab シェルの秘密
GitLab Shell用にランダムな64文字の英数字の秘密を生成します。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-gitlab-shell-secret --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)
この秘密はglobal.shell.authToken.secret
の設定で参照されます。
Gitalyの秘密
Gitaly用のランダムな64文字の英数字トークンを生成します。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-gitaly-secret --from-literal=token=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)
この秘密はglobal.gitaly.authToken.secret
の設定で参照されます。
GitLab Railsの秘密
<name>
をリリース名に置き換えてください。
cat << EOF > secrets.yml
production:
secret_key_base: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 128)
otp_key_base: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 128)
db_key_base: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 128)
openid_connect_signing_key: |
$(openssl genrsa 2048 | awk '{print " " $0}')
ci_jwt_signing_key: |
$(openssl genrsa 2048 | awk '{print " " $0}')
EOF
kubectl create secret generic <name>-rails-secret --from-file=secrets.yml
この秘密はglobal.railsSecrets.secret
の設定で参照されます。
GitLab Workhorseの秘密
Workhorse secretを生成します。これは32文字でbase64エンコードされている必要があります。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-gitlab-workhorse-secret --from-literal=shared_secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32 | base64)
この秘密はglobal.workhorse.key
の設定で参照されます。
GitLab Runnerの秘密
<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-gitlab-runner-secret --from-literal=runner-registration-token=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)
MinIOの秘密
MinIO用のランダムな20文字と64文字の英数字キーのセットを生成します。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-minio-secret --from-literal=accesskey=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 20) --from-literal=secretkey=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)
この秘密はglobal.minio.credentials.secret
の設定で参照されます。
PostgreSQL パスワード
ランダムな64文字の英数字のパスワードを生成します。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-postgresql-password \
--from-literal=postgresql-password=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64) \
--from-literal=postgresql-postgres-password=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)
Grafanaパスワード
Grafanaインテグレーションを設定する場合は、ランダムな64文字の英数字のパスワードを生成します。
generate_secret_if_needed "gitlab-grafana-initial-password" --from-literal=password=$(gen_random 'a-zA-Z0-9' 64)
レジストリ HTTP シークレット
すべてのレジストリポッドで共有されるランダムな64文字の英数字キーを生成します。<name>
をリリース名に置き換えてください。
kubectl create secret generic <name>-registry-httpsecret --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64 | base64)
外部サービス
一部のChartには、自動生成できない機能を有効にするためのさらなる秘密があります。
オムニオート
デプロイしたGitLabでOmniAuth Providersを使用できるようにするには、Globalsチャートの指示に従ってください。
LDAPパスワード
LDAPサーバーとの接続にパスワード認証が必要な場合は、Kubernetesシークレットにパスワードを保存する必要があります。
kubectl create secret generic ldap-main-password --from-literal=password=yourpasswordhere
その後、--set global.appConfig.ldap.servers.main.password.secret=ldap-main-password
を使ってパスワードを設定に注入します。
Secret
名を使用してください。SMTPパスワード
認証が必要なSMTPサーバーを使用している場合は、Kubernetesシークレットにパスワードを保存します。
kubectl create secret generic smtp-password --from-literal=password=yourpasswordhere
そしてHelmコマンドで--set global.smtp.password.secret=smtp-password
。
Secret
名を使用してください。受信メールのIMAPパスワード
GitLabが受信メールにアクセスできるようにするには、KubernetesのシークレットにIMAPアカウントのパスワードを保存します。
kubectl create secret generic incoming-email-password --from-literal=password=yourpasswordhere
その後、Helmコマンドで--set global.appConfig.incomingEmail.password.secret=incoming-email-password
、ドキュメントで指定されている他の必要な設定を行います。
Secret
名を使用してください。サービスデスクEメール用IMAPパスワード
GitLabがservice_deskのメールにアクセスできるようにするには、KubernetesのシークレットにIMAPアカウントのパスワードを保存します。
kubectl create secret generic service-desk-email-password --from-literal=password=yourpasswordhere
その後、Helmコマンドで--set global.appConfig.serviceDeskEmail.password.secret=service-desk-email-password
、ドキュメントで指定されている他の必要な設定を行います。
Secret
名を使用してください。S/MIME 証明書
送信メールメッセージは、S/MIME標準を使用してデジタル署名することができます。 S/MIME証明書は、TLSタイプのシークレットとしてKubernetesシークレットに保存する必要があります。
kubectl create secret tls smime-certificate --key=file.key --cert file.crt
不透明な型として既存の秘密が存在する場合、global.email.smime.keyName
とglobal.email.smime.certName
の値は特定の秘密用に調整する必要があります。
S/MIME設定は、values.yaml
ファイルまたはコマンドラインで設定できます。S/MIMEを有効にするには--set global.email.smime.enabled=true
、S/MIME証明書を含むシークレットを指定するには--set global.email.smime.secretName=smime-certificate
を使用します。
次のステップ
すべてのシークレットが生成され、保存されたら、GitLabのデプロイを進めることができます。