内容简介
本文介绍如何部署NGINX Ingress Controller组件。
注意事项
在参照官方「Installation Guide」文档并结合自身需求后,我们整理出此文。我们强烈建议参照官方文档并结合自己的环境进行部署。
系统环境
系统环境: | CentOS Linux release 7.4.1708 (Core) |
软件版本: | Kubernetes v1.12.1 |
Docker version 18.06.1-ce, build e68fc7a | |
Helm v3.0.0-beta.3 | |
网络信息: | k8s-master[1-3]:10.10.50.91 - 93 |
node[1-6]:10.10.50.81 - 86 | |
VIP:10.10.50.90 |
# 部署过程(适用于我们的环境)
# 附加说明
1)在默认配置中,会监视在所有命名空间中的Ingress对象。如果要改变这个行为,需要指定--watch-namespace选项,来限制到特定命名空间。
2)如果为同个主机名定义多个不同路径,则Ingress Controller将合并定义。
第一步、常规部署
我们按自己需求定制「mandtory.yaml」配置文件,并应用:
#!/bin/sh kubectl apply -f mandatory.yaml
第二步、环境特定
在minikube、AWS、Azure中,需要执行不同的命令(详细参考官方「Installation Guide」文档)。
在自建Kubernetes集群中,需要执行如下命令:
#!/bin/sh kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
第三步、查看状态
查看NGINX Ingress Controller组件的状态:
#!/bin/sh kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx --watch
第四步、定义资源进行测试
当部署NGINX Ingress Controller组件部署完成时,可以定义Ingress、Server、Deployment资源进行验证。
(1)定义资源文件(example.yaml),并应用:
#!/bin/sh kubectl apply -f example.yaml
(2)绑定HOST域名,然后在浏览器中访问。(详细过程略过)。
# 附加说明(重要)
部署Ingress Controller时,不建议使用DaemonSet类型,而应该使用Deployment类型,然后将POD示例固定在某个节点上。为什么?假如你的集群有1000个节点时…………
# 简单管理
#!/bin/sh kubectl exec -it -n <namespace-of-ingress-controller> nginx-ingress-controller-67956bf89d-fv58j cat /etc/nginx/nginx.conf kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version
相关连接
GitHub/nginxinc/kubernetes-ingress
GitHub/nginxinc/kubernetes-ingress/deployments/
参考文献
- WikiNotes/部署NGINX Ingress Controller组件
- Installing the Ingress Controller
- NGINX Ingress Controller for Kubernetes
- NGINX Ingress Controller/Installation Guide
- k8s之nginx-ingress、 Daemonset实现生产案例
- Accessing Kubernetes Pods from Outside of the Cluster
- ingress is not listening on port 80 #4799
- NGINX Ingress Controller/Troubleshooting