如何在Google Cloud GKE(1.8.10-gke.0)master节点运行kube-proxy?
在GKE 1.8.10-gke.0集群的Master节点运行kube-proxy的实现方案
嘿,针对你这个特定版本的GKE集群需求——要在master节点运行kube-proxy,从而通过master的NodePort访问Pod,我给你整理了一步步的操作方案:
1. 先搞定Master节点的访问权限
GKE的托管master节点默认不让直接SSH,得先通过worker节点跳转:
- 先SSH到任意一个worker节点:
gcloud compute ssh <你的worker节点名称> --zone=<集群所在区域> - 在worker节点上获取master节点的内部IP,用kubectl查节点列表就能看到标注为
master的节点:kubectl get nodes - 接着从worker节点SSH到master节点:
要是碰到权限问题,确保你的账号有GKE集群的管理员权限,或者在worker节点上配置好对应的SSH密钥。ssh <master节点内部IP>
2. 部署kube-proxy到Master节点
GKE的master默认不带kube-proxy,有两种方式部署:
方式一:手动运行kube-proxy容器
在master节点上执行下面的命令,记得替换参数:
docker run -d \ --name kube-proxy \ --privileged \ --net=host \ gcr.io/google_containers/kube-proxy-amd64:v1.8.10 \ --master=http://localhost:8080 \ --proxy-mode=iptables \ --cluster-cidr=<你的集群Pod CIDR范围>
- 集群Pod CIDR可以用
gcloud container clusters describe <集群名称> --zone=<区域>查看,找clusterIpv4Cidr字段的值。
方式二:修改kube-proxy的DaemonSet让它调度到Master节点
默认的kube-proxy DaemonSet因为master节点的污点(taint)不会跑在上面,我们调整下容忍度:
- 编辑kube-system命名空间下的kube-proxy DaemonSet:
kubectl edit daemonset kube-proxy -n kube-system - 在
spec.template.spec.tolerations里添加容忍master节点污点的配置:- key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule" - 另外检查下
spec.template.spec.nodeSelector,如果有node-role.kubernetes.io/node: ""这类只选worker的规则,要么删掉它,要么修改成包含master节点的选择器。 - 保存退出后,kube-proxy会自动在master节点启动Pod。
3. 验证是否生效
- 检查kube-proxy状态:
# 手动容器的情况 docker ps | grep kube-proxy # DaemonSet部署的情况 kubectl get pods -n kube-system -o wide | grep kube-proxy - 测试访问:找到你的NodePort服务的端口,用master节点的外部/内部IP访问
http://<master-ip>:<node-port>,确认能正常连接到Pod。
重要提醒
- GKE的master是托管节点,Google的维护操作可能会清除你手动部署的组件,所以这个方案更适合测试场景,别在生产环境用。
- Kubernetes 1.8版本早就过了支持周期,安全漏洞和功能缺失都很多,建议尽快升级到较新的GKE版本,新版本在master节点的组件管理上有更安全、稳定的方案。
内容的提问来源于stack exchange,提问作者Viacheslav Babanin
相关产品推荐
相关产品推荐

