For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.
Solo Enterprise for kagent
Solo Enterprise for agentregistry を Solo Enterprise for kagent ランタイムに接続します。
Solo Enterprise for kagent は Kubernetes ネイティブの AI ランタイムで、Solo Enterprise for agentregistry はこれを使用して、エージェントと MCP サーバーをクラスター内の Pod としてデプロイおよび管理します。kagent ランタイムを接続すると、レジストリサーバーは自身の OIDC サービス ID を使用して kagent コントローラーの管理 API を呼び出し、ユーザーに代わってワークロードを作成、更新、削除します。1 つのレジストリから複数の kagent クラスターに同時に接続できます。各コンポーネントの関係について詳しくは、ランタイムアーキテクチャ を参照してください。
始める前に
OIDC プロバイダーをセットアップします。このガイドでは、Keycloak をインストール済みであることを前提とします。Solo Enterprise for kagent タブに従って、必要なレルム設定、クライアント、シークレットとともに Keycloak をインストールしてください。
続行する前に、次の環境変数が設定されていることを確認します。
echo "KEYCLOAK_ISSUER: $KEYCLOAK_ISSUER" echo "AR_BACKEND_SECRET: $AR_BACKEND_SECRET" echo "KAGENT_BACKEND_SECRET: $KAGENT_BACKEND_SECRET" echo "AGENTREGISTRY_OUTBOUND_SECRET: $AGENTREGISTRY_OUTBOUND_SECRET"レジストリにログインします。対話型のデバイス認可フローと、静的なユーザー名とパスワードによる認証情報フローのどちらかを選択します。
ターミナルからの対話型ログインには、このフローを使用します。CLI は
ar-cli-interactiveパブリッククライアントを使用して、デバイス認可付与フロー を開始します。このフローでは、ブラウザーで承認するための URL とワンタイムコードが出力されます。Keycloak の発行者と
ar-cli-interactiveクライアントを使用するように CLI を設定します。その後、Solo Enterprise for agentregistry にログインします。export OIDC_ISSUER=$KEYCLOAK_ISSUER export OIDC_CLIENT_ID=ar-cli-interactive arctl user login出力例:
To complete the login process, please: 1. Open: http://172.18.0.13:8080/realms/agentregistry/device 2. Enter the code: SYSQ-SNSP - or go to: http://172.18.0.13:8080/realms/agentregistry/device?user_code=SYSQ-SNSPWeb ブラウザーで URL を開き、
admin-userユーザー名とpasswordパスワードで Keycloak にログインします。ブラウザーでコードを確認すると、Keycloak は CLI セッション用のアクセストークンを発行します。認可が完了すると、CLI はトークンをシステムのキーチェーンに保存するため、トークンが期限切れになるまで再度ログインする必要はありません。
CI/CD パイプラインなど、特定のユーザー ID が必要なスクリプト化されたログインには、このフローを使用します。CLI は
ar-cli-passwordパブリッククライアントを使用し、ユーザー名とパスワードを直接アクセストークンと交換します。admin-user/passwordの認証情報で Solo Enterprise for agentregistry にログインします。export OIDC_ISSUER=$KEYCLOAK_ISSUER arctl user login \ --oidc-flow=password-credentials \ --oidc-client-id=ar-cli-password \ --oidc-username=admin-user \ --oidc-password=passwordアクセストークンを
ARCTL_API_TOKEN環境変数に保存します。export ARCTL_API_TOKEN=$(arctl user info --show-tokens | jq -r .access_token)
ステップ 1: Solo Enterprise for kagent をインストールする
Solo Enterprise for kagent のライセンスキーを環境変数に保存します。キーを取得するには、担当者にお問い合わせください。ライセンスキーをシークレットで指定したい場合は、ライセンス を参照してください。
export KAGENT_LICENSE_KEY="<key>"使用する LLM の API キーを環境変数に保存します。この例では Gemini を使用します。サポートされている LLM の一覧については、Solo Enterprise for kagent のドキュメントの サポートされている LLM を参照してください。
export GOOGLE_API_KEY="<key>"Solo Enterprise for kagent のパッチバージョンを設定します。この例では最新バージョンを使用します。他のバージョンはリファレンスドキュメントで確認できます。
export KAGENT_ENT_VERSION=0.5.10Solo Enterprise for kagent 用の
kagent-mgmtチャートをインストールします。helm upgrade -i kagent-mgmt \ oci://us-docker.pkg.dev/solo-public/solo-enterprise-helm/charts/management \ -n kagent --create-namespace \ --version "$KAGENT_ENT_VERSION" \ --set cluster=mgmt-cluster \ --set products.kagent.enabled=true \ --set products.agentregistry.enabled=true \ --set-string licensing.licenseKey="$KAGENT_LICENSE_KEY" \ --set-string oidc.issuer="$KEYCLOAK_ISSUER" \ --set-string ui.backend.oidc.clientId=kagent-backend \ --set-string ui.backend.oidc.secret="$KAGENT_BACKEND_SECRET" \ --set-string ui.frontend.oidc.clientId=kagent-ui管理コンポーネントの Pod のステータスが
Runningであることを確認します。kubectl get po -n kagentclickhouseポッドは、ローカルデータストレージ用の ClickHouse エクスポーターを実行します。uiPod は、エージェントの監視と管理に使用できる UI を実行します。telemetry-collectorPod は、クラスターからテレメトリーデータを収集する OTel コレクターを実行します。
NAME READY STATUS RESTARTS AGE kagent-mgmt-clickhouse-shard0-0 1/1 Running 0 4s solo-enterprise-telemetry-collector-0 1/1 Running 0 4s solo-enterprise-ui-76c85c7d6b-xftcj 5/5 Running 0 4skagent-enterprise CRD チャートをインストールします。
helm upgrade --install kagent-crds \ oci://us-docker.pkg.dev/solo-public/kagent-enterprise-helm/charts/kagent-enterprise-crds \ -n kagent \ --version "$KAGENT_ENT_VERSION"Solo Enterprise for kagent コントローラー用の OBO トークンを作成し、Kubernetes シークレットに保存します。コントローラーは自身のネームスペースで
jwtという名前のシークレットを監視し、このトークンを使用して認証を行うことで、エージェントがユーザーに代わってアクションを実行できるようにします。このシークレットがないと、OBO トークンハンドラーはnot ready状態のままになり、エージェントへの A2A チャットリクエストはupstream auth failed: obo token handler not readyエラーで失敗します。openssl genrsa -out /tmp/key.pem 2048 kubectl create secret generic jwt \ -n kagent --from-file=jwt=/tmp/key.pem \ --dry-run=client -o yaml | kubectl apply -f -Solo Enterprise for kagent の RBAC 構成用の values ファイルを作成します。
roleMappingsは、Keycloak のグループ名を Solo Enterprise for kagent のロールにマッピングするルックアップテーブルです。このガイドでは、Groupsクレームにagentregistryを含むトークンには、Solo Enterprise for kagent のglobal.Writerロールが付与されます。Groupsクレームの値が異なるトークンや、Groupsクレームを持たないトークンは、401 Unauthorized レスポンスで拒否されます。cat > /tmp/kagent-rbac.yaml << 'EOF' rbac: roleMapping: roleMapper: 'has(claims.Groups) ? claims.Groups.transformList(i, v, v in rolesMap, rolesMap[v]) : []' roleMappings: agentregistry: global.Writer EOFkagent-enterpriseチャートをインストールして、Solo Enterprise for kagent コントローラーと UI をデプロイします。helm upgrade -i kagent \ oci://us-docker.pkg.dev/solo-public/kagent-enterprise-helm/charts/kagent-enterprise \ -n kagent \ --version "$KAGENT_ENT_VERSION" \ --set-string licensing.licenseKey="$KAGENT_LICENSE_KEY" \ --set agents.k8s-agent.enabled=true \ --set kagent-tools.enabled=true \ --set kmcp.licensing.createSecret=false \ --set-string oidc.issuer="$KEYCLOAK_ISSUER" \ --set oidc.clientId=kagent-backend \ --set-string oidc.secret="$KAGENT_BACKEND_SECRET" \ --set providers.openAI.apiKey=$GOOGLE_API_KEY \ -f /tmp/kagent-rbac.yamlコントローラーと UI のデプロイが準備完了であることを確認します。
kubectl get po -n kagent出力例:
kagent-controller-dfc4c966c-zzds5 1/1 Running 0 3m kagent-mgmt-clickhouse-shard0-0 1/1 Running 0 5m48s kagent-postgresql-57c4f5597f-x4mjg 1/1 Running 0 3m kagent-tools-69bdb559df-cb9bw 1/1 Running 0 3m kmcp-enterprise-controller-manager-dbd59bcbf-j5hjt 1/1 Running 0 3m solo-enterprise-telemetry-collector-0 1/1 Running 0 5m48s solo-enterprise-ui-66cbb6687c-6czzk 4/4 Running 0 5m48s
ステップ 2: Solo Enterprise for kagent に接続する
ステップ 1 でデプロイした Solo Enterprise for kagent コントローラーを Solo Enterprise for agentregistry から参照する Runtime リソースを作成します。次のセットアップ方法のいずれかを選択します。
- General setup: 標準の Kubernetes クラスターで Solo Enterprise for kagent を実行する場合は、このタブを選択します。
- Inject AWS credentials at agent runtime: AWS EKS クラスターに Solo Enterprise for kagent をインストールしていて、デプロイ済みのエージェントが S3 バケットなど他の AWS サービスにアクセスするためにランタイムで AWS 認証情報の注入を必要とする場合は、このタブを選択します。
デプロイ済みのエージェントが AWS 認証情報を必要としない標準的な Kubernetes 構成には、この手順を使用します。エージェントが Bedrock AgentCore などの AWS サービスを呼び出す必要がある場合は、代わりに エージェントのランタイムで AWS 認証情報を注入する タブを使用してください。
agentregistryKeycloak クライアントのクライアントシークレットを保存する Solo Enterprise for agentregistry の Secret を作成します。ランタイムは、Solo Enterprise for kagent コントローラーを呼び出すためのアウトバウンドトークンを発行するときに、このシークレットを参照します。arctl apply -f- <<EOF apiVersion: ar.dev/v1alpha1 kind: Secret metadata: name: kagent-oidc spec: type: Opaque stringData: clientSecret: "$AGENTREGISTRY_OUTBOUND_SECRET" EOF出力例:
✓ Secret/kagent-oidc appliedSolo Enterprise for agentregistry で Solo Enterprise for kagent ランタイムを作成します。このランタイムは、
kagentネームスペースにデプロイした Solo Enterprise for kagent コントローラーを指します。auth.oidcブロックは、レジストリサーバーがユーザーに代わって kagent コントローラーを呼び出すときに使用する認証情報を指定します。arctl apply -f- <<EOF apiVersion: ar.dev/v1alpha1 kind: Runtime metadata: name: kagent spec: type: Kagent telemetryEndpoint: http://agentregistry-enterprise-telemetry-collector.agentregistry-system.svc.cluster.local:4318 config: kagentUrl: http://kagent-controller.kagent:8083 namespace: kagent auth: oidc: issuer: $KEYCLOAK_ISSUER clientId: agentregistry clientSecretRef: name: kagent-oidc key: clientSecret EOF出力例:
✓ Runtime/kagent appliedNote
kagent コントローラーが OIDC プロバイダーとして Microsoft Entra ID を使用している場合は、次のスニペットのように
auth.oidcブロックにscopeフィールドを追加します。Entra はclient_credentialsリクエストにscopeパラメーターを要求しますが、Keycloak はこれをデフォルトで含めません。scopeには、kagent アプリ登録のアプリケーション ID URI に/.defaultを付けた値を設定します。auth: oidc: issuer: https://login.microsoftonline.com/<tenant-id>/v2.0 clientId: <entra-client-id> scope: api://<kagent-app-id>/.default clientSecretRef: name: kagent-oidc key: clientSecretSolo Enterprise for agentregistry に接続されているランタイムの一覧を表示し、
kagentランタイムが含まれていることを確認します。デフォルトのkubernetes-defaultランタイムとlocalランタイムも表示されます。arctl get runtimes出力例:
NAME TYPE kagent Kagent kubernetes-default Kubernetes local Local virtual-default Virtual
Solo Enterprise for kagent を Amazon EKS クラスターで実行していて、デプロイ済みのエージェントが AWS Bedrock AgentCore のエージェントを呼び出したり S3 バケットにアクセスしたりするために AWS 認証情報を必要とする場合は、この手順を使用します。Solo Enterprise for agentregistry は、エージェントをデプロイする前に EKS Pod Identity Association (PIA) を自動的に作成します。これにより、エージェント Pod は手動セットアップや再起動なしで、初回起動時に AWS 認証情報が注入されます。この関連付けは、エージェントのデプロイを削除すると削除されます。
Important
Solo Enterprise for agentregistry は、EKS Pod Identity を有効 (aws.usePodIdentity=true) にしてインストールされている必要があります。Amazon EKS インストールガイド に従った場合は、すでに設定済みで、ロール名は agentregistry-pod-identity-role です。クロスアカウントはサポートされていません。EKS クラスターと Pod 実行ロールは、Solo Enterprise for agentregistry と同じ AWS アカウントにある必要があります。
まだインストールしていない場合は、EKS クラスターで EKS Pod Identity Agent アドオンを有効にします。
aws eks create-addon --cluster-name $EKS_CLUSTER_NAME --addon-name eks-pod-identity-agent --region $AWS_REGIONエージェント Pod が引き受ける IAM ロールを作成し、そのロール ARN を環境変数に保存します。
信頼ポリシーファイルを作成します。
cat > pod-execution-trust-policy.json << 'EOF' { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "pods.eks.amazonaws.com"}, "Action": ["sts:AssumeRole", "sts:TagSession"] } ] } EOFIAM ロールを作成し、その ARN を保存します。
export POD_EXECUTION_ROLE_NAME="kagent-agent-pod-execution-role" aws iam create-role \ --role-name "$POD_EXECUTION_ROLE_NAME" \ --assume-role-policy-document file://pod-execution-trust-policy.json export POD_EXECUTION_ROLE_ARN=$(aws iam get-role \ --role-name "$POD_EXECUTION_ROLE_NAME" \ --query 'Role.Arn' --output text) echo "POD_EXECUTION_ROLE_ARN: $POD_EXECUTION_ROLE_ARN"
EKS クラスターの名前と Solo Enterprise for agentregistry の IAM ロールを設定し、クラスター ARN を導出します。
export EKS_CLUSTER_NAME=<eks-cluster-name> export AGENTREGISTRY_ROLE_NAME=<agentregistry-iam-role-name> export EKS_CLUSTER_ARN=$(aws eks describe-cluster \ --name "$EKS_CLUSTER_NAME" \ --query 'cluster.arn' \ --output text) echo "EKS_CLUSTER_ARN: $EKS_CLUSTER_ARN"Solo Enterprise for agentregistry の IAM ロール名が分からない場合は、既存の Pod Identity Association から確認できます。
aws eks list-pod-identity-associations \ --cluster-name "$EKS_CLUSTER_NAME" \ --namespace agentregistry-system \ --query 'associations[].{SA:serviceAccount,Role:roleArn}' \ --output tableSolo Enterprise for agentregistry の IAM ロールに、クラスター上の Pod Identity Association を管理する権限と、前の手順で作成した Pod 実行ロールをエージェント Pod に渡す権限を付与します。
aws iam put-role-policy \ --role-name "$AGENTREGISTRY_ROLE_NAME" \ --policy-name "AgentRegistryPodIdentity" \ --policy-document "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"eks:CreatePodIdentityAssociation\", \"eks:DeletePodIdentityAssociation\", \"eks:ListPodIdentityAssociations\" ], \"Resource\": \"$EKS_CLUSTER_ARN\" }, { \"Effect\": \"Allow\", \"Action\": \"iam:PassRole\", \"Resource\": \"$POD_EXECUTION_ROLE_ARN\" } ] }"agentregistryKeycloak クライアントのクライアントシークレットを保存する Solo Enterprise for agentregistry の Secret を作成します。arctl apply -f- <<EOF apiVersion: ar.dev/v1alpha1 kind: Secret metadata: name: kagent-oidc spec: type: Opaque stringData: clientSecret: "$AGENTREGISTRY_OUTBOUND_SECRET" EOF出力例:
✓ Secret/kagent-oidc appliedSolo Enterprise for kagent ランタイムを作成します。
auth.connectionブロックにより、Solo Enterprise for agentregistry はこのランタイムにデプロイする各エージェント用に Pod Identity Association を作成します。arctl apply -f- <<EOF apiVersion: ar.dev/v1alpha1 kind: Runtime metadata: name: kagent spec: type: Kagent telemetryEndpoint: http://agentregistry-enterprise-telemetry-collector.agentregistry-system.svc.cluster.local:4318 config: kagentUrl: http://kagent-controller.kagent:8083 namespace: kagent auth: oidc: issuer: $KEYCLOAK_ISSUER clientId: agentregistry clientSecretRef: name: kagent-oidc key: clientSecret connection: type: aws aws: podExecutionRoleArn: $POD_EXECUTION_ROLE_ARN clusterArn: $EKS_CLUSTER_ARN EOFField Description auth.connection.typeSet に awsに enable EKS Pod Identity。auth.connection.aws.podExecutionRoleArnエージェント Pod にアタッチする IAM ロールの ARN です。 auth.connection.aws.clusterArnEKS クラスターの ARN です。pod identity を使用する場合に必要です。 出力例:
✓ Runtime/kagent appliedNote
kagent コントローラーが OIDC プロバイダーとして Microsoft Entra ID を使用している場合は、次のスニペットのように
auth.oidcブロックにscopeフィールドを追加します。Entra はclient_credentialsリクエストにscopeパラメーターを要求しますが、Keycloak はこれをデフォルトで含めません。scopeには、kagent アプリ登録のアプリケーション ID URI に/.defaultを付けた値を設定します。auth: oidc: issuer: https://login.microsoftonline.com/<tenant-id>/v2.0 clientId: <entra-client-id> scope: api://<kagent-app-id>/.default clientSecretRef: name: kagent-oidc key: clientSecretSolo Enterprise for agentregistry に接続されているランタイムの一覧を表示し、
kagentランタイムが含まれていることを確認します。arctl get runtimes出力例:
NAME TYPE kagent Kagent kubernetes-default Kubernetes local Local virtual-default Virtual
ステップ 3: 任意: Solo Enterprise for Istio をインストールする
AccessPolicy によるランタイム認可には、Solo Enterprise for Istio (アンビエントメッシュ) と Solo Enterprise for agentgateway が必要です。この 2 つが、リクエストがターゲットに到達する前にネットワークレベルで AccessPolicy を適用する ztunnel とウェイポイントプロキシの基盤を提供します。
Note
この手順は、基本的なエージェントのデプロイでは任意です。エージェントがランタイムで呼び出せる MCP サーバーツールを制限する場合にのみ必要です。
アンビエントメッシュをインストールする
Solo Enterprise for Istio のライセンスキーを環境変数に保存します。ライセンスキーは Solo Enterprise for kagent のライセンスに含まれています。キーを入手するには、担当者にお問い合わせください。
export SOLO_ISTIO_LICENSE_KEY=<key>Solo ディストリビューションの Istio バージョンとイメージリポジトリの詳細を保存します。
export ISTIO_VERSION=1.29.7-patch0 export ISTIO_IMAGE=${ISTIO_VERSION}-solo export REPO=us-docker.pkg.dev/soloio-img/istio export HELM_REPO=us-docker.pkg.dev/soloio-img/istio-helmウェイポイントプロキシなどのコンポーネントに必要な Kubernetes Gateway API の CRD を適用します。
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/standard-install.yamlIstio のセットアップに必要な CRD とクラスターロールを含む
istio-baseチャートをインストールします。helm upgrade --install istio-base oci://${HELM_REPO}/base \ --namespace istio-system \ --create-namespace \ --version ${ISTIO_IMAGE} \ -f - <<EOF defaultRevision: "" profile: ambient EOFistiodコントロールプレーンを作成します。helm upgrade --install istiod oci://${HELM_REPO}/istiod \ --namespace istio-system \ --version ${ISTIO_IMAGE} \ -f - <<EOF global: hub: ${REPO} proxy: clusterDomain: cluster.local tag: ${ISTIO_IMAGE} meshConfig: accessLogFile: /dev/stdout defaultConfig: proxyMetadata: ISTIO_META_DNS_AUTO_ALLOCATE: "true" ISTIO_META_DNS_CAPTURE: "true" env: PILOT_ENABLE_IP_AUTOALLOCATE: "true" PILOT_SKIP_VALIDATE_TRUST_DOMAIN: "true" pilot: cni: namespace: istio-system enabled: true profile: ambient license: value: ${SOLO_ISTIO_LICENSE_KEY} EOFIstio CNI ノードエージェントの daemonset をインストールします。
helm upgrade --install istio-cni oci://${HELM_REPO}/cni \ --namespace istio-system \ --version ${ISTIO_IMAGE} \ -f - <<EOF ambient: dnsCapture: true excludeNamespaces: - istio-system - kube-system global: hub: ${REPO} tag: ${ISTIO_IMAGE} profile: ambient EOFztunnel の daemonset をインストールします。
helm upgrade --install ztunnel oci://${HELM_REPO}/ztunnel \ --namespace istio-system \ --version ${ISTIO_IMAGE} \ -f - <<EOF configValidation: true enabled: true env: L7_ENABLED: "true" hub: ${REPO} istioNamespace: istio-system namespace: istio-system profile: ambient proxy: clusterDomain: cluster.local tag: ${ISTIO_IMAGE} terminationGracePeriodSeconds: 29 variant: distroless EOFアンビエントメッシュのコンポーネントが動作していることを確認します。
kubectl get pods -n istio-system出力例:
NAME READY STATUS RESTARTS AGE istio-cni-node-ps9vs 1/1 Running 0 80s istiod-58f745c977-q94jj 1/1 Running 0 94s ztunnel-7df9l 1/1 Running 0 62skagentネームスペースをアンビエントメッシュに登録します。このラベルによって、ztunnel がネームスペース内のすべての Pod のトラフィックを傍受し、AccessPolicy が適用されるウェイポイントプロキシをトラフィックが通過するようになります。このラベルがないと、エージェントから MCP へのトラフィックはウェイポイントを迂回し、ポリシーがまったく適用されません。kubectl label namespace kagent istio.io/dataplane-mode=ambientラベルが適用されたことを確認します。
kubectl get namespace kagent --show-labels出力例:
NAME STATUS AGE LABELS kagent Active 10m istio.io/dataplane-mode=ambient,kubernetes.io/metadata.name=kagent
Solo Enterprise for agentgateway をインストールする
Solo Enterprise for agentgateway は、AccessPolicy を適用するウェイポイントプロキシをデプロイします。アンビエントメッシュのインストール後にインストールする必要があります。
Solo Enterprise for agentgateway のライセンスキーを環境変数に保存します。ライセンスキーは Solo Enterprise for kagent のライセンスに含まれています。
export AGENTGATEWAY_LICENSE_KEY=<key>Solo Enterprise for agentgateway の CRD とコントロールプレーンをデプロイします。
helm upgrade -i enterprise-agentgateway-crds \ oci://us-docker.pkg.dev/solo-public/enterprise-agentgateway/charts/enterprise-agentgateway-crds \ --create-namespace \ --namespace agentgateway-system \ --version v2026.7.0 helm upgrade -i enterprise-agentgateway \ oci://us-docker.pkg.dev/solo-public/enterprise-agentgateway/charts/enterprise-agentgateway \ --namespace agentgateway-system \ --version v2026.7.0 \ --set licensing.licenseKey=${AGENTGATEWAY_LICENSE_KEY}agentgateway が動作していることを確認します。
kubectl get pods -n agentgateway-system出力例:
NAME READY STATUS RESTARTS AGE enterprise-agentgateway-5495d98459-46dpk 1/1 Running 0 19s