通过Ingress对外暴露ClusterIP类型Kubernetes Dashboard无法获取IP问题咨询
- 第一步:获取Nginx Ingress Controller的对外入口IP
你要绑定到dashboard.com的IP不是Ingress资源或dashboard服务的ClusterIP,而是Nginx Ingress Controller的对外访问IP,执行以下命令查询:
kubectl get service -n ingress-nginx
从返回结果的EXTERNAL-IP列获取IP即可。如果你的集群是裸机部署、无云厂商负载均衡,EXTERNAL-IP会显示为<pending>,此时可以直接使用集群任意节点的IP,配合Ingress Controller的HTTPS NodePort使用,也可以通过修改Ingress Controller部署配置使用HostNetwork模式直接复用节点IP。
- 第二步:校验Ingress资源是否被正常识别
执行以下命令查看Ingress资源状态:
kubectl get ingress -n kubernetes-dashboard
如果返回结果的ADDRESS列为空,说明当前Ingress规则没有被Nginx Ingress Controller处理,原因是你的Ingress配置缺少ingress类声明,需要在spec字段下添加ingressClassName: nginx(需对应你部署的Nginx Ingress Controller的ingress类名称),或在metadata.annotations中添加kubernetes.io/ingress.class: "nginx"。
修正后的Ingress配置参考:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: dashboard-ingress namespace: kubernetes-dashboard annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # *必填*,dashboard后端默认只接受HTTPS请求 spec: ingressClassName: nginx # 补充ingress类声明,与你部署的Nginx Ingress Controller类名一致 tls: - hosts: - dashboard.com secretName: kubernetes-dashboard-certs rules: - host: dashboard.com http: paths: - pathType: ImplementationSpecific path: / backend: service: name: kubernetes-dashboard port: number: 443
第三步:校验依赖资源有效性
执行kubectl get secret -n kubernetes-dashboard kubernetes-dashboard-certs确认你配置的TLS证书Secret确实存在于对应命名空间下,不存在的话需要先创建合法的TLS证书Secret。第四步:配置hosts并验证
将第一步获取的IP和dashboard.com的映射关系添加到/etc/hosts文件,格式如下:
[你获取的入口IP] dashboard.com
配置完成后即可通过https://dashboard.com访问kubernetes-dashboard服务。
内容的提问来源于stack exchange,提问作者Anil

