Skip to content

kubeconfig的管理策略升级 #1

@KeyOfSpectator

Description

@KeyOfSpectator

客户使用场景

  1. 生产环境推荐使用阿里云vpc内网打通后,通过内网kubeconfig访问集群。
  2. 测试和开发时默认使用公网的ACK kubeconfig访问集群。(生产不推荐)
  3. 通过配置本地kubeconfig方式访问
  4. incluster方式,在部署 ack-mcp-server至k8s集群内场景,以incluster方式访问集群。

设计

追加两个可选配置参数:

  • KUBECONFIG_MODE = ACK_PUBLIC(默认,通过ACK OpenAPI获取公网kubeconfig访问) / ACK_PRIVATE (通过ACK OpenAPI获取内网kubeconfig访问) / LOCAL(本地kubeconfig)

  • KUBECONFIG_PATH = xxx (Optional参数,只有当KUBECONFIG_MODE = LOCAL 时生效,指定本地kubeconfig文件路径)

考虑如下几种使用ack-mcp-server的场景

1. KUBECONFIG_MODE - 公网还是内网 kubeconfig的选择 - 咱们是ACK K8s集群,默认都会有内网kubeconfig,但是需要咱们用户挂载公网SLB给apiserver之后,才会有公网kubeconfig。

因为毕竟是 ack-mcp-server,针对ACK集群。

优先我们ack-mcp-server什么配置不配,默认寻找公网kubeconfig连通。(但是这并不是安全最佳实践,生产系统使用还是建议走内网kubeconfig,像你这样使用)

然后咱们启动ack-mcp-server需要额外加一个配置参数: KUBECONFIG_MODE = ACK_PUBLIC 来指定走内网kubeconfig

2. 若希望走本地 kubeconfig 配置方式,还是走ACK OpenAPI获取kubeconfig

2.1 指定kubeconfig本地路径

有的用户使用ack-mcp-server会以helm包方式安装在集群里,这里只希望这个ack-mcp-server服务这一个k8s集群。

这里我们希望直接走incluster模式。 kubectl也只针对这一个集群。

这里我们希望额外增加一个配置参数: 2》 KUBECONFIG_PATH = ~/.kube/config (支持incluster mode )or others kubeconfig local path

2.2 如需要incluster模式

可以再配置其他可选参数来实现,比如:
kubectl config set-cluster the-cluster --server="https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT}" --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
kubectl config set-credentials pod-token --token="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
kubectl config set-context pod-context --cluster=the-cluster --user=pod-token
kubectl config use-context pod-context

  1. 如果两者模式配置都配了

抛错,不支持本地多个kubeconfig的复杂配置。避免产生配置歧义,屏蔽本地多份kubeconfig和ACK集群映射关系的复杂度。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions