代理 API
引入于极狐GitLab 14.10。
- 代理令牌 API 引入于极狐GitLab 15.0。
使用代理 API 与 Kubernetes 的极狐GitLab 代理一起工作。
列出项目的代理
返回项目注册的代理列表。
您必须至少具有开发者的角色才能使用这个端点。
GET /projects/:id/cluster_agents
参数:
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
响应:
响应是包含以下字段的代理列表:
参数 | 类型 | 描述 |
---|---|---|
id |
integer | 代理 ID |
name |
string | 代理名称 |
config_project |
object | 代表代理从属的项目的对象 |
config_project.id |
integer | 项目 ID |
config_project.description |
string | 项目描述 |
config_project.name |
string | 项目名称 |
config_project.name_with_namespace |
string | 带有项目命名空间的全名 |
config_project.path |
string | 项目路径 |
config_project.path_with_namespace |
string | 带有项目命名空间的完整路径 |
config_project.created_at |
string | 创建项目的 ISO8601 日期时间 |
created_at |
string | 创建代理的 ISO8601 日期时间 |
created_by_user_id |
integer | 创建代理的用户的 ID |
请求示例:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents"
响应示例:
[
{
"id": 1,
"name": "agent-1",
"config_project": {
"id": 20,
"description": "",
"name": "test",
"name_with_namespace": "Administrator / test",
"path": "test",
"path_with_namespace": "root/test",
"created_at": "2022-03-20T20:42:40.221Z"
},
"created_at": "2022-04-20T20:42:40.221Z",
"created_by_user_id": 42
},
{
"id": 2,
"name": "agent-2",
"config_project": {
"id": 20,
"description": "",
"name": "test",
"name_with_namespace": "Administrator / test",
"path": "test",
"path_with_namespace": "root/test",
"created_at": "2022-03-20T20:42:40.221Z"
},
"created_at": "2022-04-20T20:42:40.221Z",
"created_by_user_id": 42
}
]
获取代理详细信息
获取单个代理的详细信息。
您必须至少具有开发者的角色才能使用这个端点。
GET /projects/:id/cluster_agents/:agent_id
参数:
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
agent_id |
integer | yes | 代理 ID |
响应:
响应是包含以下字段的单个代理:
参数 | 类型 | 描述 |
---|---|---|
id |
integer | 代理 ID |
name |
string | 代理名称 |
config_project |
object | 代表代理从属的项目的对象 |
config_project.id |
integer | 项目 ID |
config_project.description |
string | 项目描述 |
config_project.name |
string | 项目名称 |
config_project.name_with_namespace |
string | 带有项目命名空间的全名 |
config_project.path |
string | 项目路径 |
config_project.path_with_namespace |
string | 带有项目命名空间的完整路径 |
config_project.created_at |
string | 创建项目的 ISO8601 日期时间 |
created_at |
string | 创建代理的 ISO8601 日期时间 |
created_by_user_id |
integer | 创建代理的用户的 ID |
请求示例:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/1"
响应示例:
{
"id": 1,
"name": "agent-1",
"config_project": {
"id": 20,
"description": "",
"name": "test",
"name_with_namespace": "Administrator / test",
"path": "test",
"path_with_namespace": "root/test",
"created_at": "2022-03-20T20:42:40.221Z"
},
"created_at": "2022-04-20T20:42:40.221Z",
"created_by_user_id": 42
}
注册项目代理
注册项目代理。
您必须至少具有维护者的角色才能使用这个端点。
POST /projects/:id/cluster_agents
参数:
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
name |
string | yes | 代理名称 |
响应:
响应是包含以下字段的新代理:
参数 | 类型 | 描述 |
---|---|---|
id |
integer | 代理 ID |
name |
string | 代理名称 |
config_project |
object | 代表代理从属的项目的对象 |
config_project.id |
integer | 项目 ID |
config_project.description |
string | 项目描述 |
config_project.name |
string | 项目名称 |
config_project.name_with_namespace |
string | 带有项目命名空间的全名 |
config_project.path |
string | 项目路径 |
config_project.path_with_namespace |
string | 带有项目命名空间的完整路径 |
config_project.created_at |
string | 创建项目的 ISO8601 日期时间 |
created_at |
string | 创建代理的 ISO8601 日期时间 |
created_by_user_id |
integer | 创建代理的用户的 ID |
请求示例:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents" \
-H "Content-Type:application/json" \
-X POST --data '{"name":"some-agent"}'
响应示例:
{
"id": 1,
"name": "agent-1",
"config_project": {
"id": 20,
"description": "",
"name": "test",
"name_with_namespace": "Administrator / test",
"path": "test",
"path_with_namespace": "root/test",
"created_at": "2022-03-20T20:42:40.221Z"
},
"created_at": "2022-04-20T20:42:40.221Z",
"created_by_user_id": 42
}
删除注册代理
删除现存的代理注册。
您必须至少具有维护者的角色才能使用这个端点。
DELETE /projects/:id/cluster_agents/:agent_id
参数:
| 参数 | 类型 | 是否必需 | 描述 |
|——–|——————-|——|—————————————————————|
| id
| integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
| agent_id
| integer | yes | 代理 ID |
请求示例:
curl --request DELETE --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/1
列出代理的令牌
- 引入于极狐GitLab 15.0。
返回代理的活跃令牌的列表。
您必须至少具有开发者的角色才能使用这个端点。
GET /projects/:id/cluster_agents/:agent_id/tokens
支持的参数:
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
agent_id |
integer or string | yes | 代理 ID |
响应:
响应是包含以下字段的令牌列表:
参数 | 类型 | 描述 |
---|---|---|
id |
integer | 令牌 ID |
name |
string | 令牌名称 |
description |
string or null | 令牌描述 |
agent_id |
integer | 令牌从属的代理的 ID |
status |
string | 令牌的状态。有效值为 active 和 revoked
|
created_at |
string | 创建令牌的 ISO8601 日期时间 |
created_by_user_id |
string | 创建令牌的用户的 ID |
请求示例:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/tokens"
响应示例:
[
{
"id": 1,
"name": "abcd",
"description": "Some token",
"agent_id": 5,
"status": "active",
"created_at": "2022-03-25T14:12:11.497Z",
"created_by_user_id": 1
},
{
"id": 2,
"name": "foobar",
"description": null,
"agent_id": 5,
"status": "active",
"created_at": "2022-03-25T14:12:11.497Z",
"created_by_user_id": 1
}
]
last_used_at
字段。获取单个代理令牌
引入于极狐GitLab 15.0。
获取单个代理令牌。
您必须至少具有开发者的角色才能使用这个端点。
如果代理令牌已被撤销,则返回 404
。
GET /projects/:id/cluster_agents/:agent_id/tokens/:token_id
支持的参数:
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
agent_id |
integer | yes | 代理 ID |
token_id |
integer | yes | 令牌 ID |
响应:
响应是包含以下字段的单个令牌:
参数 | 类型 | 描述 |
---|---|---|
id |
integer | 令牌 ID |
name |
string | 令牌名称 |
description |
string or null | 令牌描述 |
agent_id |
integer | 令牌从属的代理的 ID |
status |
string | 令牌状态。有效值为 active 和 revoked
|
created_at |
string | 创建令牌的 ISO8601 日期时间 |
created_by_user_id |
string | 创建令牌的用户的 ID |
last_used_at |
string or null | 上次使用令牌的 ISO8601 日期时间 |
请求示例:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/token/1"
响应示例:
{
"id": 1,
"name": "abcd",
"description": "Some token",
"agent_id": 5,
"status": "active",
"created_at": "2022-03-25T14:12:11.497Z",
"created_by_user_id": 1,
"last_used_at": null
}
创建代理令牌
- 引入于极狐GitLab 15.0。
- 双令牌限制引入于极狐GitLab 16.1,功能标志为
cluster_agents_limit_tokens_created
。- 双令牌限制普遍可用于极狐GitLab 16.2。移除
cluster_agents_limit_tokens_created
功能标志。
为代理创建新的令牌。
您必须至少具有维护者的角色才能使用这个端点。
代理一次只能拥有两个活动令牌。
POST /projects/:id/cluster_agents/:agent_id/tokens
支持的参数:
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
agent_id |
integer | yes | 代理 ID |
name |
string | yes | 令牌名称 |
description |
string | no | 令牌描述 |
响应:
响应是包含以下字段的新令牌:
参数 | 类型 | 描述 |
---|---|---|
id |
integer | 令牌 ID |
name |
string | 令牌名称 |
description |
string or null | 令牌描述 |
agent_id |
integer | 令牌从属的代理的 ID |
status |
string | 令牌状态。有效值为 active 和 revoked
|
created_at |
string | 创建令牌的 ISO8601 日期时间 |
created_by_user_id |
string | 创建令牌的用户的 ID |
last_used_at |
string or null | 上次使用的令牌的 ISO8601 日期时间 |
token |
string | Secret 令牌值 |
POST
端点的时候才能返回 token
,且之后无法检索。请求示例:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/tokens" \
-H "Content-Type:application/json" \
-X POST --data '{"name":"some-token"}'
响应示例:
{
"id": 1,
"name": "abcd",
"description": "Some token",
"agent_id": 5,
"status": "active",
"created_at": "2022-03-25T14:12:11.497Z",
"created_by_user_id": 1,
"last_used_at": null,
"token": "qeY8UVRisx9y3Loxo1scLxFuRxYcgeX3sxsdrpP_fR3Loq4xyg"
}
撤回代理令牌
引入于极狐GitLab 15.0。
撤回代理令牌。
您必须至少具有维护者的角色才能使用这个端点。
DELETE /projects/:id/cluster_agents/:agent_id/tokens/:token_id
支持的参数:
| 参数 | 类型 | 是否必需 | 描述 |
|————|——————-|——|—————————————————————|
| id
| integer or string | yes | 授权用户维护的 ID 或 URL 编码的项目路径 |
| agent_id
| integer | yes | 代理 ID |
| token_id
| integer | yes | 令牌 ID |
请求示例:
curl --request DELETE --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/tokens/1
Receptive agents
DETAILS: Tier: Ultimate Offering: Self-managed
- Introduced in GitLab 17.4.
Receptive agents allow GitLab to integrate with Kubernetes clusters that cannot establish a network connection to the GitLab instance, but can be connected to by GitLab.
List URL configurations for a receptive agent
Returns a list of URL configurations for an agent.
You must have at least the Developer role to use this endpoint.
GET /projects/:id/cluster_agents/:agent_id/url_configurations
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
id |
integer or string | yes | ID or URL-encoded path of the project maintained by the authenticated user. |
agent_id |
integer or string | yes | ID of the agent. |
Response:
The response is a list of URL configurations with the following fields:
Attribute | Type | Description |
---|---|---|
id |
integer | ID of the URL configuration. |
agent_id |
integer | ID of the agent the URL configuration belongs to. |
url |
string | URL for this URL configuration. |
public_key |
string | (optional) Base64-encoded public key if JWT authentication is used. |
client_cert |
string | (optional) Client certificate in PEM format if mTLS authentication is used. |
ca_cert |
string | (optional) CA certificate in PEM format to verify the agent endpoint. |
tls_host |
string | (optional) TLS host name to verify the server name in agent endpoint. |
Example request:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/url_configurations"
Example response:
[
{
"id": 1,
"agent_id": 5,
"url": "grpcs://agent.example.com:4242",
"public_key": "..."
}
]
public_key
or client_cert
is set, but never both.Get a single agent URL configuration
Gets a single agent URL configuration.
You must have at least the Developer role to use this endpoint.
GET /projects/:id/cluster_agents/:agent_id/url_configurations/:url_configuration_id
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
id |
integer or string | yes | ID or URL-encoded path of the project maintained by the authenticated user. |
agent_id |
integer | yes | ID of the agent. |
url_configuration_id |
integer | yes | ID of the URL configuration. |
Response:
The response is a single URL configuration with the following fields:
Attribute | Type | Description |
---|---|---|
id |
integer | ID of the URL configuration. |
agent_id |
integer | ID of the agent the URL configuration belongs to. |
url |
string | Agent URL for this URL configuration. |
public_key |
string | (optional) Base64-encoded public key if JWT authentication is used. |
client_cert |
string | (optional) Client certificate in PEM format if mTLS authentication is used. |
ca_cert |
string | (optional) CA certificate in PEM format to verify the agent endpoint. |
tls_host |
string | (optional) TLS host name to verify the server name in agent endpoint. |
Example request:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/url_configurations/1"
Example response:
{
"id": 1,
"agent_id": 5,
"url": "grpcs://agent.example.com:4242",
"public_key": "..."
}
public_key
or client_cert
is set, but never both.创建大理的 URL 配置
为代理创建新的 URL 配置。
您必须至少具有维护者角色才能使用才端点。
一个代码同时只能拥有一个 URL 配置。
POST /projects/:id/cluster_agents/:agent_id/url_configurations
支持的属性:
属性 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | ID 或有授权用户维护的项目 URL 编码。 |
agent_id |
integer | yes | 代理的 ID。 |
url |
string | yes | URL 配置的代理 URL。 |
client_cert |
string | no | 如果使用 mTLS 认证授权的话,需要 PEM 格式的客户端证书。必须通过 client_key 提供。 |
client_key |
string | no | 如果使用 mTLS 认证授权的话,需要 PEM 格式的客户端 key,必须通过 client_cert 提供。 |
ca_cert |
string | no | PEM 格式的 CA 证书用来验证代理端点。 |
tls_host |
string | no | TLS 主机名称用来验证代理端点的服务器名称。 |
响应:
响应时新的 URL 配置并具有以下字段:
属性 | 类型 | 描述 |
---|---|---|
id |
integer | URL 配置的 ID。 |
agent_id |
integer | URL 配置所属的代理 ID。 |
url |
string | 此 URL 配置的代理 URL。 |
public_key |
string | (可选)Base64 编码的公钥,如果使用了 JWT 认证授权的话。 |
client_cert |
string | (可选)PEM 格式的客户端证书,如果使用了 mTLS 认证授权的话。 |
ca_cert |
string | (可选)PEM 格式的 CA 证书用来验证代理端点。 |
tls_host |
string | (可选)TLS 主机名称用来验证代理端点中的服务器名称。 |
使用 JWT 令牌创建 URL 配置的示例请求如下:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/url_configurations" \
-H "Content-Type:application/json" \
-X POST --data '{"url":"grpcs://agent.example.com:4242"}'
JWT 认证的示例响应如下:
{
"id": 1,
"agent_id": 5,
"url": "grpcs://agent.example.com:4242",
"public_key": "..."
}
使用 mTLS 并使用来自文件 client.pem
和 client-key.pme
的证书和密钥来创建 URL 配置的示例:
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/url_configurations" \
-H "Content-Type:application/json" \
-X POST --data '{"url":"grpcs://agent.example.com:4242", "client_cert":"'"$(awk -v ORS='\\n' '1' client.pem)"'", "client_key": "'"$(awk -v ORS='\\n' '1' client-key.pem)"'"}'
mTLS 的示例响应:
{
"id": 1,
"agent_id": 5,
"url": "grpcs://agent.example.com:4242",
"client_cert": "..."
}
client_cert
和 client_key
,就会有私钥公钥对生成并且使用 JWT 认证授权而不是 mTLS。删除代理的 URL 配置
删除某个代理的 URL 配置。
您必须至少是维护者角色才能使用此端点。
DELETE /projects/:id/cluster_agents/:agent_id/url_configurations/:url_configuration_id
支持的属性:
属性 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | ID 或由授权用户维护的 项目的 URL 编码路径 。 |
agent_id |
integer | yes | 代理的 ID。 |
url_configuration_id |
integer | yes | URL 配置的 ID。 |
示例请求:
curl --request DELETE --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects/20/cluster_agents/5/url_configurations/1