GitLab agent server for Kubernetes(KAS) をインストールします。
エージェントサーバーはGitLabと一緒にインストールするコンポーネントです。Kubernetes用のGitLabエージェントを管理するために必要です。
KASの頭文字は旧名称のKubernetes agent server
。
Kubernetes用のエージェントサーバーはGitLab.comにインストールされており、wss://kas.gitlab.com
。セルフマネジメントのGitLabを使用する場合は、エージェントサーバーをインストールするか、外部インストールを指定する必要があります。
インストールオプション
GitLab管理者として、エージェントサーバーをインストールすることができます:
- Linux パッケージのインストールの場合。
- GitLab Helmチャートのインストール用。
Linux パッケージインストール用
Linuxパッケージインストール用のエージェントサーバは、1つのノードで有効にすることも、複数のノードで同時に有効にすることもできます。
単一ノードでの有効化
単一ノードでエージェントサーバを有効にするには、以下の手順に従います:
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_kas['enable'] = true
-
GitLab を再設定します。
その他の設定オプションについては、gitlab.rb.template
のEnable GitLab KASセクションを参照してください。
UNIX ソケットで KAS をリッスンする設定
GitLab をプロキシの後ろで使っている場合、KAS が正しく動作しないことがあります。シングルノードのインストールでこのイシューを解決するには、KAS を UNIX ソケットでリッスンするように設定します。
KAS を UNIX ソケットでリッスンするように設定するには、以下の手順に従います:
-
KAS ソケット用のディレクトリを作成します:
sudo mkdir -p /var/opt/gitlab/gitlab-kas/sockets/
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_kas['internal_api_listen_network'] = 'unix' gitlab_kas['internal_api_listen_address'] = '/var/opt/gitlab/gitlab-kas/sockets/internal-api.socket' gitlab_kas['private_api_listen_network'] = 'unix' gitlab_kas['private_api_listen_address'] = '/var/opt/gitlab/gitlab-kas/sockets/private-api.socket' gitlab_kas['env'] = { 'SSL_CERT_DIR' => "/opt/gitlab/embedded/ssl/certs/", 'OWN_PRIVATE_API_URL' => 'unix:///var/opt/gitlab/gitlab-kas/sockets/private-api.socket' }
-
GitLab を再設定します。
複数ノードで有効化
複数のノードでエージェントサーバを有効にするには、以下の手順に従います:
-
各エージェントサーバノードで、
/etc/gitlab/gitlab.rb
を編集します:gitlab_kas_external_url 'wss://kas.gitlab.example.com/' gitlab_kas['enable'] = true gitlab_kas['api_secret_key'] = '<32_bytes_long_base64_encoded_value>' gitlab_kas['private_api_secret_key'] = '<32_bytes_long_base64_encoded_value>' gitlab_kas['private_api_listen_address'] = '0.0.0.0:8155' gitlab_kas['env'] = { 'SSL_CERT_DIR' => "/opt/gitlab/embedded/ssl/certs/", 'OWN_PRIVATE_API_URL' => 'grpc://<ip_or_hostname_of_this_host>:8155' } gitlab_rails['gitlab_kas_enabled'] = true gitlab_rails['gitlab_kas_external_url'] = 'wss://gitlab.example.com/-/kubernetes-agent/' gitlab_rails['gitlab_kas_internal_url'] = 'grpc://kas.internal.gitlab.example.com' gitlab_rails['gitlab_kas_external_k8s_proxy_url'] = 'https://gitlab.example.com/-/kubernetes-agent/k8s-proxy/'
-
GitLab を再設定します。
エージェントサーバノードの設定
設定 | 説明 |
---|---|
gitlab_kas['private_api_listen_address'] | エージェントサーバがリッスンするアドレス。0.0.0.0 またはクラスター内の他のノードから到達可能な IP アドレスに設定します。 |
gitlab_kas['api_secret_key'] | KASとGitLab間の認証に使われる共有シークレット。Base64 エンコードされた 32 バイト長の値でなければなりません。 |
gitlab_kas['private_api_secret_key'] | 異なる KAS インスタンス間での認証に使われる共有シークレット。Base64 エンコードされた、32 バイト長の値でなければなりません。 |
OWN_PRIVATE_API_URL | KAS がサービス発見のために使用する環境変数。設定するノードのホスト名または IP アドレスを設定します。このノードはクラスター内の他のノードから到達可能でなければなりません。 |
gitlab_kas_external_url | クラスター内部のユーザー向けURLagentk 。完全修飾ドメインまたはサブドメイン、**1 または GitLab 外部 URL を指定できます。2 空白の場合、デフォルトはGitLab外部URLです。 |
gitlab_rails['gitlab_kas_external_url'] | クラスター内部のユーザー向けURLagentk .空白の場合、デフォルトはgitlab_kas_external_url 。 |
gitlab_rails['gitlab_kas_external_k8s_proxy_url'] | Kubernetes APIプロキシ用のユーザー向けURL。空白の場合、デフォルトはgitlab_kas_external_url に基づくURLになります。 |
gitlab_rails['gitlab_kas_internal_url'] | GitLab バックエンドが KAS と通信するために使用する内部 URL。 |
- 例えば、
wss://kas.gitlab.example.com/
. - 例えば、
wss://gitlab.example.com/-/kubernetes-agent/
.
GitLab Helm Chartの場合
GitLabHelmChartインストール用:
-
global.kas.enabled
をtrue
に設定します。例えば、helm
とkubectl
をインストールしたShellで実行します:helm repo add gitlab https://charts.gitlab.io/ helm repo update helm upgrade --install gitlab gitlab/gitlab \ --timeout 600s \ --set global.hosts.domain=<YOUR_DOMAIN> \ --set global.hosts.externalIP=<YOUR_IP> \ --set certmanager-issuer.email=<YOUR_EMAIL> \ --set global.kas.enabled=true # <-- without this setting, the agent server will not be installed
-
エージェントサーバを設定するには、
values.yaml
ファイルのgitlab.kas
サブセクションを使用します:gitlab: kas: # put your custom options here
詳細については、GitLab-KAS チャートの使い方を参照してください。
Kubernetes APIプロキシクッキー
KASはKubernetes APIリクエストをGitLabエージェントにプロキシします:
ユーザー認証情報を使って認証するために、RailsはGitLabフロントエンド用のCookieを設定します。このクッキーは_gitlab_kas
と呼ばれ、_gitlab_session
クッキーのように暗号化されたセッション ID を含んでいます。_gitlab_kas
クッキーは、ユーザーを認証・認可するためのリクエストごとに KAS プロキシエンドポイントに送られなければなりません。
トラブルシューティング
Kubernetes用エージェントサーバーの使用中にイシューが発生した場合は、次のコマンドを実行してサービスログを表示します:
kubectl logs -f -l=app=kas -n <YOUR-GITLAB-NAMESPACE>
Linuxパッケージインストールでは、/var/log/gitlab/gitlab-kas/
にログがあります。
また、個々のエージェントの問題をトラブルシューティングすることもできます。
GitOps: プロジェクト情報の取得に失敗しました。
以下のエラーメッセージが表示された場合は、GitOps: 失敗しました:
{"level":"warn","time":"2020-10-30T08:37:26.123Z","msg":"GitOps: failed to get project info","agent_id":4,"project_id":"root/kas-manifest001","error":"error kind: 0; status: 404"}
マニフェスト (root/kas-manifest001
) で指定されたプロジェクトが存在しないか、マニフェストが保持されているプロジェクトが非公開です。このイシューを修正するには、プロジェクトのパスが正しく、プロジェクトの可視性が公開に設定されていることを確認してください。
設定ファイルが見つかりません。
以下のエラーメッセージが表示された場合は、GitOps: 失敗しました:
time="2020-10-29T04:44:14Z" level=warning msg="Config: failed to fetch" agent_id=2 error="configuration file not found: \".gitlab/agents/test-agent/config.yaml\
パスが正しくありません:
- エージェントが登録されたリポジトリ。
- エージェント設定ファイル。
このイシューを修正するには、パスが正しいことを確認してください。
dial tcp <GITLAB_INTERNAL_IP>:443: connect: connection refused
セルフマネージド GitLab を実行している場合:
- インスタンスが SSL 終端プロキシの後ろで動いていない場合。
- GitLabインスタンス自体にHTTPSが設定されていないインスタンス。
- インスタンスのホスト名が内部IPアドレスにローカル解決されています。
エージェントサーバーが GitLab API に接続しようとすると、以下のエラーが発生することがあります:
{"level":"error","time":"2021-08-16T14:56:47.289Z","msg":"GetAgentInfo()","correlation_id":"01FD7QE35RXXXX8R47WZFBAXTN","grpc_service":"gitlab.agent.reverse_tunnel.rpc.ReverseTunnel","grpc_method":"Connect","error":"Get \"https://gitlab.example.com/api/v4/internal/kubernetes/agent_info\": dial tcp 172.17.0.4:443: connect: connection refused"}
Linuxパッケージインストールでこのイシューを修正するには、/etc/gitlab/gitlab.rb
で以下のパラメータを設定します。gitlab.example.com
を GitLab インスタンスのホスト名に置き換えてください:
gitlab_kas['gitlab_address'] = 'http://gitlab.example.com'