秘密

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.keyregistry-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 を使ってパスワードを設定に注入します。

注意Helm プロパティを設定する際は、実際のパスワードではなくSecret 名を使用してください。

SMTPパスワード

認証が必要なSMTPサーバーを使用している場合は、Kubernetesシークレットにパスワードを保存します。

kubectl create secret generic smtp-password --from-literal=password=yourpasswordhere

そしてHelmコマンドで--set global.smtp.password.secret=smtp-password

注意Helm プロパティを設定する際は、実際のパスワードではなく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ドキュメントで指定されている他の必要な設定を行います。

注意Helm プロパティを設定する際は、実際のパスワードではなく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ドキュメントで指定されている他の必要な設定を行います。

注意Helm プロパティを設定する際は、実際のパスワードではなくSecret 名を使用してください。

S/MIME 証明書

送信メールメッセージは、S/MIME標準を使用してデジタル署名することができます。 S/MIME証明書は、TLSタイプのシークレットとしてKubernetesシークレットに保存する必要があります。

kubectl create secret tls smime-certificate --key=file.key --cert file.crt

不透明な型として既存の秘密が存在する場合、global.email.smime.keyNameglobal.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のデプロイを進めることができます。