在Kubernetes Kubeadm集群中部署应用后,如何配置Ingress Nginx Controller?
用Ingress Nginx Controller暴露gmt-dpl应用的完整步骤
没问题,我来一步步帮你搞定这件事儿:
1. 先确认Ingress Nginx Controller已安装
首先得检查你的Kubernetes集群里有没有部署Ingress Nginx Controller,执行这条命令:
kubectl get pods -n ingress-nginx
如果返回结果是空,或者提示ingress-nginx命名空间不存在,说明还没安装。你可以用官方的静态部署清单来部署:
- 从Ingress Nginx官方维护的资源中,下载对应你Kubernetes版本的静态部署文件(注意选择匹配的controller版本)
- 将文件保存为
ingress-nginx-deploy.yaml - 执行安装命令:
kubectl apply -f ingress-nginx-deploy.yaml
等个3-5分钟,再执行开头的检查命令,看到所有pod的状态都是Running,就说明安装成功了。
2. 创建Ingress资源配置文件
接下来要写一个Ingress配置文件,用来把外部请求转发到你的gmt-svc服务上。比如创建一个名为gmt-ingress.yaml的文件,内容如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: gmt-ingress annotations: # 重点!告诉Ingress Controller后端应用用HTTP协议(如果你的应用是HTTPS就改成HTTPS) nginx.ingress.kubernetes.io/backend-protocol: "HTTP" spec: rules: - host: gmt.example.com # 这里可以换成你自己的域名,不想用域名的话可以删掉整行 http: paths: - path: / pathType: Prefix backend: service: name: gmt-svc # 对应你之前创建的Service名称 port: number: 443 # 对应Service的port字段(不是NodePort哦)
关键细节说明:
nginx.ingress.kubernetes.io/backend-protocol:这个注解绝对不能少!你的gmt-svc对外暴露的是443端口,但实际后端应用监听的是8181端口(HTTP服务),如果不加这个注解,Ingress Controller会默认用HTTPS去连接后端的8181端口,直接导致连接失败。host:如果有自己的域名,就填上去;没有的话直接删掉整个host行,之后用Ingress Controller的IP就能访问。
3. 部署Ingress配置
执行这条命令把刚才的配置部署到集群里:
kubectl apply -f gmt-ingress.yaml
4. 验证Ingress是否生效
先查看Ingress的状态:
kubectl get ingress
正常情况下会看到类似这样的输出:
NAME CLASS HOSTS ADDRESS PORTS AGE gmt-ingress nginx gmt.example.com 192.168.56.10 80 2m
ADDRESS字段就是Ingress Controller的入口IP,你可以用这个IP直接访问(如果没填host的话)。
如果你的Ingress Controller是NodePort类型(Kubeadm集群没有LoadBalancer的话大概率是这样),还需要找一下它的NodePort端口:
kubectl get svc -n ingress-nginx
找到ingress-nginx-controller对应的NODEPORT列(比如是32100),然后用http://<集群任意节点IP>:32100就能访问你的应用了。要是填了host,记得在本地的hosts文件里把gmt.example.com映射到Ingress Controller的IP,之后直接用域名访问就行。
内容的提问来源于stack exchange,提问作者BOUKANDOURA Mhamed




