GitLab agent server for Kubernetes(KAS) をインストールします。

  • GitLab 13.10 で導入されたGitLab エージェントサーバ(KAS) は、GitLab.comwss://kas.gitlab.com で利用できるようになりました。
  • 14.5でGitLab PremiumからGitLab Freeに移行

エージェントサーバーはGitLabと一緒にインストールするコンポーネントです。Kubernetes用のGitLabエージェントを管理するために必要です。

KASの頭文字は旧名称のKubernetes agent server

Kubernetes用のエージェントサーバーはGitLab.comにインストールされており、wss://kas.gitlab.com 。セルフマネジメントのGitLabを使用する場合は、エージェントサーバーをインストールするか、外部インストールを指定する必要があります。

インストールオプション

GitLab管理者として、エージェントサーバーをインストールすることができます:

Linux パッケージインストール用

Linuxパッケージインストール用のエージェントサーバは、1つのノードで有効にすることも、複数のノードで同時に有効にすることもできます。

単一ノードでの有効化

単一ノードでエージェントサーバを有効にするには、以下の手順に従います:

  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_kas['enable'] = true
    
  2. GitLab を再設定します。

その他の設定オプションについては、gitlab.rb.templateEnable GitLab KASセクションを参照してください。

UNIX ソケットで KAS をリッスンする設定

GitLab をプロキシの後ろで使っている場合、KAS が正しく動作しないことがあります。シングルノードのインストールでこのイシューを解決するには、KAS を UNIX ソケットでリッスンするように設定します。

KAS を UNIX ソケットでリッスンするように設定するには、以下の手順に従います:

  1. KAS ソケット用のディレクトリを作成します:

    sudo mkdir -p /var/opt/gitlab/gitlab-kas/sockets/
    
  2. /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'
    }
    
  3. GitLab を再設定します。

複数ノードで有効化

複数のノードでエージェントサーバを有効にするには、以下の手順に従います:

  1. 各エージェントサーバノードで、/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/'
    
  2. 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_URLKAS がサービス発見のために使用する環境変数。設定するノードのホスト名または 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。
  1. 例えば、wss://kas.gitlab.example.com/.
  2. 例えば、wss://gitlab.example.com/-/kubernetes-agent/.

GitLab Helm Chartの場合

GitLabHelmChartインストール用:

  1. global.kas.enabledtrue に設定します。例えば、helmkubectl をインストールした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
    
  2. エージェントサーバを設定するには、values.yaml ファイルのgitlab.kas サブセクションを使用します:

    gitlab:
      kas:
        # put your custom options here
    

詳細については、GitLab-KAS チャートの使い方を参照してください。

  • GitLab 15.10 でkas_user_accesskas_user_access_project という機能フラグで導入されました。デフォルトでは無効。
  • 機能フラグkas_user_accesskas_user_access_project はGitLab 16.1で有効になりました。
  • GitLab 16.2で機能フラグkas_user_accesskas_user_access_project削除されました。

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'