Azure AKS代理节点能否向主节点开启代理?节点运行kubectl proxy咨询
先给你明确结论:在AKS节点上运行kubectl proxy是可行的,同时也有办法通过代理节点(比如跳板VM)向AKS主节点开启代理,下面分点给你详细说明:
一、在AKS集群节点上运行kubectl proxy
要在AKS的工作节点上运行kubectl proxy,需要解决两个核心问题:kubectl工具的存在和正确的权限授权:
确保节点上有kubectl工具
AKS的默认节点镜像通常已经预装了kubectl,但如果你的节点没有的话,可以通过包管理器安装(比如Ubuntu用apt-get install kubectl,CentOS用yum install kubectl)。配置kubeconfig与权限
AKS节点上的kubelet默认有一个kubeconfig文件(通常在/var/lib/kubelet/kubeconfig),但这个配置的权限是针对kubelet的,直接用它运行kubectl proxy可能会有权限限制。更安全的做法是创建一个专用的ServiceAccount,赋予它Linkerd服务发现所需的最小权限(比如读取Services、Endpoints等资源的权限),然后生成对应的kubeconfig文件放到节点上:- 首先创建ServiceAccount和ClusterRoleBinding:
apiVersion: v1 kind: ServiceAccount metadata: name: linkerd-proxy-sa namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: linkerd-proxy-role rules: - apiGroups: [""] resources: ["services", "endpoints", "pods"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: linkerd-proxy-binding subjects: - kind: ServiceAccount name: linkerd-proxy-sa namespace: kube-system roleRef: kind: ClusterRole name: linkerd-proxy-role apiGroup: rbac.authorization.k8s.io - 然后获取该ServiceAccount的token,生成kubeconfig文件,分发到每个AKS节点上。
- 最后在节点上运行:
这里kubectl proxy --kubeconfig=/path/to/your/kubeconfig --address=0.0.0.0 --port=8001--address=0.0.0.0允许从节点外部访问代理(如果Linkerd需要的话),端口可以根据你的需求调整。
另外,你也可以通过DaemonSet来自动在每个节点上运行一个包含kubectl proxy的Pod,这样更易于管理,不需要手动在每个节点操作。
- 首先创建ServiceAccount和ClusterRoleBinding:
二、从代理节点(跳板VM)向AKS主节点开启kubectl proxy
如果你有一个Azure VM作为代理/跳板节点,想要通过它向AKS主节点开启代理,步骤如下:
在跳板VM上安装kubectl
同样,先确保跳板VM上有kubectl工具,安装方法和上面一致。配置AKS的kubeconfig到跳板VM
在你的本地机器上运行az aks get-credentials --resource-group <你的资源组名> --name <你的AKS集群名>,然后把生成的kubeconfig文件(默认在~/.kube/config)复制到跳板VM的~/.kube/config路径下。开启kubectl proxy
在跳板VM上运行:kubectl proxy --address=0.0.0.0 --port=8001 --accept-hosts='.*'这里
--accept-hosts='.*'允许来自任意主机的请求(如果需要从其他机器访问这个代理的话),你也可以根据安全需求限制特定主机。这样,你就可以通过跳板VM的IP和端口8001来访问AKS主节点的API了。
注意事项
- 安全问题:开启
kubectl proxy后,相当于暴露了K8s API的访问权限,一定要严格控制访问来源,比如通过防火墙规则限制只有Linkerd相关组件或特定IP能访问代理端口。 - Linkerd替代方案:虽然官方建议用kubectl proxy,但如果长期使用,建议考虑升级Linkerd到支持TLS的版本,或者配置K8s API的TLS访问,这样可以避免依赖kubectl proxy的安全风险。
内容的提问来源于stack exchange,提问作者Tomas Aschan

