EC2部署Minikube时Ingress地址与Minikube IP不同,如何通过Ingress访问Kubernetes Dashboard
解决方案
1. 修正Ingress配置错误
你当前的Ingress配置中rewrite规则缺少路径捕获组,会导致路径转发异常,替换为以下配置即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: kubernetes-dashboard annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/ssl-passthrough: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/use-regex: "true" # 修正rewrite规则匹配路径捕获 nginx.ingress.kubernetes.io/rewrite-target: /$2 name: ingress-resource spec: rules: - http: paths: # 修正path添加捕获组匹配子路径 - path: /kubedashboard(/|$)(.*) pathType: Prefix backend: service: name: kubernetes-dashboard port: number: 443
修改后执行kubectl apply -f <你的ingress文件名.yaml>生效配置。
2. 开启Nginx Ingress Controller的SSL透传支持
你配置了ssl-passthrough: "true"参数,默认Minikube安装的Nginx Ingress Controller没有开启该功能,执行以下命令修改Controller启动参数:
kubectl patch deployment ingress-nginx-controller -n ingress-nginx --type=merge -p '{"spec":{"template":{"spec":{"containers":[{"name":"controller","args":["/nginx-ingress-controller","--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller","--election-id=ingress-controller-leader","--controller-class=k8s.io/ingress-nginx","--configmap=$(POD_NAMESPACE)/ingress-nginx-controller","--validating-webhook=:8443","--validating-webhook-certificate=/usr/local/certificates/cert","--validating-webhook-key=/usr/local/certificates/key","--enable-ssl-passthrough"]}]}}}'
等待Controller Pod重启完成后再继续后续操作。
3. 确认端口与安全组配置
- 首先获取Nginx Ingress Controller的HTTPS NodePort端口:
kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'
输出的端口即为后续访问需要用到的NodePort值。
- 登录EC2控制台,在对应实例的安全组中添加入站规则,放行TCP协议的上述NodePort端口,源地址可根据需求设置为你的本地公网IP或者0.0.0.0/0。
4. Minikube Docker驱动特殊处理
如果你使用Docker作为Minikube的运行驱动,Minikube的NodePort默认不会直接暴露到EC2主机网络,可选择以下任意一种方式处理:
- 方式1:启动Minikube时提前映射对应端口(替换为你的实际NodePort)
minikube start --ports=30443:30443
- 方式2:通过
minikube service命令临时暴露Ingress Controller端口到EC2主机
minikube service ingress-nginx-controller -n ingress-nginx --https
执行后会输出映射到EC2本地的访问地址,替换对应端口部分即可。
5. 验证访问
配置完成后即可使用你要求的三种方式访问Dashboard:
- EC2本地访问:
curl https://localhost:<替换为你的NodePort>/kubedashboard --insecure - 集群内部访问:
curl https://$(minikube ip):<替换为你的NodePort>/kubedashboard --insecure - 公网访问:
curl https://<你的EC2公网IP>:<替换为你的NodePort>/kubedashboard --insecure
补充:你看到的Ingress地址与Minikube IP不一致属于正常现象,Ingress资源的ADDRESS字段是Cloud Provider分配的负载均衡地址,你使用NodePort类型的Controller时该字段不影响实际访问,只要请求打到Ingress Controller的NodePort端口即可正常路由。
内容的提问来源于stack exchange,提问作者Sri Durga
相关产品推荐
相关产品推荐

