Google Cloud环境下执行ingress-nginx部署mandatory命令报错求助
GCP GKE环境部署ingress-nginx v0.30.0 报错排查方案
前置校验:确认kubeconfig配置有效
已经完成gcloud auth login身份认证后,还需要同步GKE集群的访问凭证到本地kubectl配置中,执行如下命令:
gcloud container clusters get-credentials <集群名称> --zone <集群可用区> --project <GCP项目ID>
执行后验证当前上下文是否指向目标集群:
kubectl config current-context
问题1:K8s版本与ingress-nginx版本不兼容
ingress-nginx v0.30.0为2020年发布的旧版本,仅适配K8s 1.15及更低版本,而GKE当前默认集群版本均高于1.16,旧版本资源的extensions/v1beta1等APIVersion已经被废弃,会触发资源识别失败报错。
解决方案:
- 优先选择与你的GKE集群版本适配的ingress-nginx版本进行部署,避免版本兼容性问题
- 若必须使用v0.30.0版本,手动修改下载后的mandatory.yaml文件,替换废弃APIVersion并补充必填字段:
- 将Deployment资源的
apiVersion: extensions/v1beta1修改为apiVersion: apps/v1 - 在Deployment的spec字段下补充与template.metadata.labels匹配的selector字段
- 所有Ingress相关资源的APIVersion同步替换为
networking.k8s.io/v1
- 将Deployment资源的
问题2:RBAC权限不足
GKE默认开启RBAC权限控制,普通谷歌账号默认没有集群管理员权限,会导致部分集群级资源(ClusterRole、ClusterRoleBinding)创建失败。
解决方案:
执行如下命令为当前账号绑定集群管理员权限:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=$(gcloud config get-value account)
权限绑定完成后,重新执行kubectl apply -f mandatory.yaml命令即可。
后续排查手段
如果部署后仍有异常,可通过以下命令定位具体错误:
- 查看ingress-nginx控制器部署事件:
kubectl describe deploy -n ingress-nginx nginx-ingress-controller - 查看控制器Pod运行日志:
kubectl logs -n ingress-nginx <nginx-ingress-controller-pod名称>
内容的提问来源于stack exchange,提问作者Pinakin Chaubal
相关产品推荐
相关产品推荐

