Kubernetes 实战:在 Minikube 中使用 NGINX Ingress 控制器
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
引言
在现代云原生应用中,Ingress 是 Kubernetes 中管理外部访问的重要资源。本文将带你深入实践,在 Minikube 环境中配置 NGINX Ingress 控制器,并通过实际案例演示如何实现基于路径的路由功能。
环境准备
基础要求
- 已安装 Minikube 并运行本地 Kubernetes 集群
- 确保 Kubernetes 版本 ≥ 1.19
- 系统架构需支持 AMD64(若使用其他架构需特殊处理)
初始化集群
minikube start
启用 Ingress 控制器
NGINX Ingress 控制器是 Kubernetes 最常用的 Ingress 实现之一。在 Minikube 中启用它非常简单:
minikube addons enable ingress
验证控制器是否正常运行:
kubectl get pods -n ingress-nginx
等待约1分钟后,你应该能看到类似以下的输出,表明控制器已就绪:
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-g9g49 0/1 Completed 0 11m
ingress-nginx-admission-patch-rqp78 0/1 Completed 1 11m
ingress-nginx-controller-59b45fb494-26npt 1/1 Running 0 11m
部署示例应用
创建第一个应用
我们首先部署一个简单的 Hello World 应用:
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
kubectl expose deployment web --type=NodePort --port=8080
验证部署状态:
kubectl get deployment web
kubectl get service web
测试应用访问
通过 NodePort 访问应用:
minikube service web --url
curl <返回的URL>
你应该能看到 Hello World 的响应,包含版本和主机名信息。
配置 Ingress 路由
创建 Ingress 资源
创建 example-ingress.yaml
文件,定义路由规则:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello-world.example
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
应用配置:
kubectl apply -f example-ingress.yaml
验证 Ingress
检查 Ingress 状态:
kubectl get ingress
等待 ADDRESS 列出现 IP 地址后,可以通过以下方式测试:
curl --resolve "hello-world.example:80:<Minikube IP>" -i http://hello-world.example
扩展应用路由
部署第二个版本
kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0
kubectl expose deployment web2 --port=8080 --type=NodePort
更新 Ingress 配置
修改 example-ingress.yaml
,添加新的路径规则:
- path: /v2
pathType: Prefix
backend:
service:
name: web2
port:
number: 8080
应用更新:
kubectl apply -f example-ingress.yaml
测试多版本路由
现在你可以通过不同路径访问不同版本的应用:
- 访问 v1:
curl ... http://hello-world.example/
- 访问 v2:
curl ... http://hello-world.example/v2
本地开发技巧
对于本地开发环境,你可能需要:
-
在
/etc/hosts
中添加域名解析:<Minikube IP> hello-world.example
-
MacOS 用户可能需要运行:
minikube tunnel
总结
通过本教程,你学会了:
- 在 Minikube 中启用 NGINX Ingress 控制器
- 部署多版本应用并通过 Ingress 暴露
- 配置基于路径的路由规则
- 验证和测试 Ingress 配置
Ingress 是 Kubernetes 中管理外部访问的强大工具,掌握它可以让你更灵活地控制流量路由。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考