Skip to content

Commit

Permalink
feat: Job 支持多租户 TencentBlueKing#3369
Browse files Browse the repository at this point in the history
  • Loading branch information
wangyu096 committed Jan 8, 2025
1 parent 9fa22a1 commit d565ebe
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,7 @@
public interface TenantIdConstants {

/**
* 非多租户环境默认租户 ID
* 默认租户 ID
*/
String NON_TENANT_ENV_DEFAULT_TENANT_ID = "default";

/**
* 多租户环境运营租户 ID
*/
String TENANT_ENV_SYSTEM_TENANT_ID = "system";
String DEFAULT_TENANT_ID = "default";
}
Original file line number Diff line number Diff line change
Expand Up @@ -298,10 +298,33 @@ private <T> Header[] buildBkApiRequestHeaders(OpenApiRequestInfo<T> requestInfo)
headers.addAll(requestInfo.getHeaders());
}

checkTenantHeader(headers);

Header[] headerArray = new Header[headers.size()];
return headers.toArray(headerArray);
}

/**
* 检查调用蓝鲸 Open API 的请求是否包含租户 header
*
* @param headers 请求 headers
*/
private void checkTenantHeader(List<Header> headers) {
boolean containsTenantHeader = headers.stream()
.anyMatch(header -> header.getName().equalsIgnoreCase(JobCommonHeaders.BK_TENANT_ID));
if (!containsTenantHeader) {
if (tenantEnvService.isTenantEnabled()) {
// 临时方案,为了尽快联调;后续这里需要抛出异常
log.warn("Add default tenant header : {}", TenantIdConstants.DEFAULT_TENANT_ID);
headers.add(new BasicHeader(TenantIdConstants.DEFAULT_TENANT_ID, TenantIdConstants.DEFAULT_TENANT_ID));
// throw new InternalException("Header: " + JobCommonHeaders.BK_TENANT_ID + " is required",
// ErrorCode.API_ERROR);
} else {
headers.add(new BasicHeader(TenantIdConstants.DEFAULT_TENANT_ID, TenantIdConstants.DEFAULT_TENANT_ID));
}
}
}

private Header buildBkApiAuthorizationHeader(BkApiAuthorization authorization) {
return new BasicHeader(BK_API_AUTH_HEADER, jsonMapper.toJson(authorization));
}
Expand Down Expand Up @@ -352,13 +375,5 @@ protected void handleResponseError(HttpResponse httpResponse, Object responseBod
throw new BkOpenApiException(httpResponse.getStatusCode());
}

/**
* 获取 Open API 调用默认的租户 ID
*/
protected String getDefaultTenant() {
return tenantEnvService.isTenantEnabled() ? TenantIdConstants.TENANT_ENV_SYSTEM_TENANT_ID
: TenantIdConstants.NON_TENANT_ENV_DEFAULT_TENANT_ID;
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.tencent.bk.job.common.constant.ErrorCode;
import com.tencent.bk.job.common.constant.HttpMethodEnum;
import com.tencent.bk.job.common.constant.JobCommonHeaders;
import com.tencent.bk.job.common.constant.TenantIdConstants;
import com.tencent.bk.job.common.esb.config.AppProperties;
import com.tencent.bk.job.common.esb.config.BkApiGatewayProperties;
import com.tencent.bk.job.common.esb.metrics.EsbMetricTags;
Expand Down Expand Up @@ -158,7 +159,7 @@ public List<OpenApiTenant> listAllTenant() {
.builder()
.method(HttpMethodEnum.GET)
.uri("/api/v3/open/tenants")
.addHeader(new BasicHeader(JobCommonHeaders.BK_TENANT_ID, getDefaultTenant()))
.addHeader(new BasicHeader(JobCommonHeaders.BK_TENANT_ID, TenantIdConstants.DEFAULT_TENANT_ID))
.authorization(authorization)
.build(),
request -> doRequest(request, new TypeReference<OpenApiResponse<List<OpenApiTenant>>>() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ private String extractTenantId(ServerHttpRequest request) {
}
} else {
// 如果未开启多租户特性,设置默认租户 default(蓝鲸约定)
return TenantIdConstants.NON_TENANT_ENV_DEFAULT_TENANT_ID;
return TenantIdConstants.DEFAULT_TENANT_ID;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ private GatewayFilter getLoginFilter() {

request.mutate().header("username", new String[]{user.getUsername()}).build();
String tenantId = tenantEnvService.isTenantEnabled() ? user.getTenantId() :
TenantIdConstants.NON_TENANT_ENV_DEFAULT_TENANT_ID;
TenantIdConstants.DEFAULT_TENANT_ID;
request.mutate().header(JobCommonHeaders.BK_TENANT_ID, new String[]{tenantId}).build();
return chain.filter(exchange.mutate().request(request).build());
};
Expand Down
17 changes: 17 additions & 0 deletions support-files/kubernetes/charts/bk-job/VALUES_LOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
# chart values 更新日志
## 0.9.0
1. 新增 bk-login/bk-user蓝鲸网关配置
```yaml
# 蓝鲸登录 API Gateway url
bkLoginApiGatewayUrl: "http://bkapi.example.com/api/bk-login"
# 蓝鲸用户管理 API Gateway url
bkUserApiGatewayUrl: "http://bkapi.example.com/api/bk-user"
```
2. 新增租户配置
```yaml
# 多租户配置
tenant:
# 是否启用多租户
enabled: false
```
## 0.8.2
1. AI小鲸支持配置使用的大模型
```yaml
Expand Down

0 comments on commit d565ebe

Please sign in to comment.