GitLab-Shellチャートの使い方

gitlab-shell サブチャートは、GitLabへのGit SSHアクセス用に設定されたSSHサーバーを提供します。

要件

このチャートは、完全なGitLabチャートの一部として、またはこのチャートがデプロイされたKubernetesクラスターから到達可能な外部サービスとして提供されるWorkhorseサービスへのアクセスに依存します。

デザインの選択

SSH レプリカを簡単にサポートし、SSH 認証キーの共有ストレージを使わないようにするために、SSHAuthorizedKeysCommandを使って GitLab の認証キーエンドポイントに対して認証を行っています。 その結果、これらのポッド内で認証キーファイルを永続化したり更新したりすることはありません。

設定

gitlab-shell Chartは、外部サービスとChart設定の2つの部分で構成されます。Ingressを通して公開されるポートはglobal.shell.portで構成され、デフォルトは22です。サービスの外部ポートもglobal.shell.portで制御されます。

インストールコマンドラインオプション

パラメータ デフォルト 説明
annotations   ポッド注釈
config.loginGraceTime 120 ユーザがログインに成功しなかった場合にサーバが切断する時間を指定します。
config.maxStartups.full 100 SSHd の拒否確率は線形に増加し、認証されていない接続数が指定された数に達すると、すべての認証されていない接続試行が拒否されます。
config.maxStartups.rate 30 SSHd は、認証されていないコネクションが多すぎる場合に、 指定された確率でコネクションを拒否します (オプション)。
config.maxStartups.start 10 SSHd は、認証されていない接続が指定した数以上ある場合、 ある確率で接続を拒否します (オプション)。
deployment.livenessProbe.initialDelaySeconds 10 生存性プローブが開始されるまでの遅延
deployment.livenessProbe.periodSeconds 10 生存性プローブの実行頻度
deployment.livenessProbe.timeoutSeconds 3 生存性プローブがタイムアウトした場合
deployment.livenessProbe.successThreshold 1 一度失敗したプローブが成功したとみなされるための最小連続成功回数
deployment.livenessProbe.failureThreshold 3 プローブが成功した後、失敗したとみなすための最小連続失敗数
enabled true シェル有効フラグ
extraContainers   追加コンテナのリスト
extraInitContainers   追加するinitコンテナのリスト
extraVolumeMounts   エクストラボリュームマウントのリスト
extraVolumes   作成する追加ボリュームのリスト
extraEnv   公開する追加環境変数のリスト
hpa.targetAverageValue 100m オートスケーリング目標値の設定
image.pullPolicy Always シェルイメージのプルポリシー
image.pullSecrets   画像リポジトリの秘密
image.repository registry.com/gitlab-org/build/cng/gitlab-shell シェルイメージリポジトリ
image.tag latest シェル画像タグ
init.image.repository   initContainer イメージ
init.image.tag   initContainer画像タグ
replicaCount 1 シェルのレプリカ
service.externalTrafficPolicy Cluster Shellサービスの外部トラフィックポリシー(クラスターまたはローカル)
service.internalPort 2222 シェル内部ポート
service.nodePort   shell nodePort を設定します。
service.name gitlab-shell シェルサービス名
service.type ClusterIP シェルサービスタイプ
service.loadBalancerIP   ロードバランサーに割り当てるIPアドレス(サポートされている場合)
service.loadBalancerSourceRanges   ロードバランサーへのアクセスを許可する IP CIDR のリスト (サポートされている場合)
securityContext.fsGroup 1000 ポッドを起動するグループID
securityContext.runAsUser 1000 ポッドを起動するユーザID
tolerations [] ポッド割り当てのためのトレラベル
workhorse.serviceName webservice Workhorseサービス名(デフォルトでは、Workhorseはウェブサービスのポッド/サービスの一部です。)

チャート構成例

エクストラエンバイロメント

extraEnv を使用すると、ポッド内のすべてのコンテナで追加の環境変数を公開できます。

以下はextraEnvの使用例です:

extraEnv:
  SOME_KEY: some_value
  SOME_OTHER_KEY: some_other_value

コンテナを起動すると、環境変数が公開されていることを確認できます:

env | grep SOME
SOME_KEY=some_value
SOME_OTHER_KEY=some_other_value

画像.pullSecrets

pullSecrets を使うと、非公開レジストリで認証してポッドのイメージを取り出せるようになります。

非公開レジストリとその認証方法についての詳細は、Kubernetesのドキュメントに記載されています。

以下はpullSecretsの使用例です:

image:
  repository: my.shell.repository
  tag: latest
  pullPolicy: Always
  pullSecrets:
  - name: my-secret-name
  - name: my-secondary-secret-name

こうわん

tolerations 汚染されたワーカーノードでポッドのスケジューリングが可能

以下はtolerationsの使用例です:

tolerations:
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoSchedule"
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoExecute"

コンメンタール

annotations GitLab Shellのポッドにアノテーションを追加することができます。

以下はannotations

annotations:
  kubernetes.io/example-annotation: annotation-value

外部サービス

このChartはWorkhorseのサービスに添付されているはずです。

ワークホース

workhorse:
  host: workhorse.example.com
  serviceName: webservice
  port: 8181
名称 タイプ デフォルト 説明
host 文字列   Workhorse サーバーのホスト名。これはserviceNameの代わりに省略できます。
port 整数 8181 Workhorseサーバーに接続するポート。
serviceName 文字列 webservice Workhorse サーバをオペレーションしているservice の名前。デフォルトでは、Workhorse はウェブサービス Pods / Service の一部です。これが存在し、host が存在しない場合、チャートはhost の値の代わりにサービスのホスト名(および現在の.Release.Name)をテンプレート化します。これは、Workhorse を GitLab チャート全体の一部として使用する場合に便利です。

チャート設定

GitLab Shellポッドの設定には以下の値を使用します。

hostKeys.secret

SSH ホストキーを取得する Kubernetessecret の名前。GitLab Shell で使用するには、シークレット内のキーはキー名ssh_host_ で始まる必要があります。

authToken

GitLab ShellはWorkhorseとの通信でAuth Tokenを使用します。 GitLab ShellとWorkhorseは共有Secretを使用してトークンを共有します。

authToken:
 secret: gitlab-shell-secret
 key: secret
名称 タイプ デフォルト 説明
authToken.key 文字列   認証トークンを含む上記の秘密のキーの名前。
authToken.secret 文字列   プルするKubernetesSecret の名前。

ロードバランサーサービス

service.typeLoadBalancerに設定されている場合、オプションでservice.loadBalancerIP を指定すると、ユーザー指定の IP でLoadBalancer を作成できます(クラウドプロバイダーがサポートしている場合)。

また、オプションでservice.loadBalancerSourceRanges のリストを指定して、LoadBalancer にアクセスできる CIDR 範囲を制限することもできます(クラウドプロバイダーがサポートしている場合)。

LoadBalancer サービスタイプに関する追加情報は、Kubernetes ドキュメントに記載されています。

service:
  type: LoadBalancer
  loadBalancerIP: 1.2.3.4
  loadBalancerSourceRanges:
  - 5.6.7.8/32
  - 10.0.0.0/8