在上一篇文章中咱们介绍了如何经过helm进行安装部署traefik组件,文中还提到经常使用的ingress controller除了traefik还有Nginx、HAProxy、Kong等,在本篇文章中咱们就介绍如何安装部署Nginx-ingress,只有在通过积累不一样组件的使用经验以后,咱们才能更好的比较其优劣,造成最佳实践。nginx
# step1: 经过helm查找nginx-ingress
> helm search nginx-ingress
> helm inspect stable/nginx-ingress
复制代码
部分企业因为服务器没有外网访问策略以及防火墙的缘由没法获取国外Docker镜像,因此咱们事先须要将所需镜像准备好,并上传到企业私有镜像仓库git
# step2: 镜像准备
> docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1
> docker tag quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1 registry.hankercloud.com/ingress-controller/nginx-ingress-controller:0.25.1
> docker push registry.hankercloud.com/ingress-controller/nginx-ingress-controller:0.25.1
>
> docker pull k8s.gcr.io/defaultbackend-amd64:1.5
> docker tag k8s.gcr.io/defaultbackend-amd64:1.5 registry.hankercloud.com/google_containers/defaultbackend-amd64:1.5
> docker push registry.hankercloud.com/google_containers/defaultbackend-amd64:1.5
复制代码
在上一篇博客中,咱们是采用Deployment
模式部署的traefik组件,此次咱们采用DaemonSet
的模式来部署nginx-ingress组件github
# step3: 组件部署
> helm install stable/nginx-ingress --name nginx-ingress --namespace=kube-system \
--set fullnameOverride=nginx-ingress \
--set controller.kind=DaemonSet \
--set controller.daemonset.useHostPort=true \
--set controller.metrics.enabled=true \
--set controller.image.repository=registry.hankercloud.com/ingress-controller/nginx-ingress-controller \
--set defaultBackend.image.repository=registry.hankercloud.com/google_containers/defaultbackend-amd64
# step4: 检查部署是否成功
> helm list
> kubectl get all -n kube-system
> kubectl logs $POD_NAME -n kube-system
复制代码
本次咱们采用DaemonSet部署nginx-ingress组件,而且使用了主机的80和443接口用来分别接收http和https请求,咱们将相应的域名解析到nginx-ingress Pod所在的主机IP以后,就能够经过域名来进行相应的域名访问了。docker
但上述配置方式没法作到高可用,当nginx-ingress的Pod实例故障或者其所在主机发生故障时,会致使相应的域名没法访问,因此建议在公有云购买负载均衡设备并配置相应的后端服务器列表以实现高可用的目的。后端
在上文中咱们经过helm部署了一个wordpress应用,本文咱们继续经过该应用进行域名访问,在本机控制台输入 > curl -i http://10.0.0.182 -H 'Host: blog.hankercloud.com'
,若是看到有正常返回则说明部署成功bash
# 内网nginx-ingress配置声明:
spec:
template:
spec:
containers:
- args:
- /nginx-ingress-controller
- --default-backend-service=kube-system/nginx-ingress-default-backend
- --election-id=ingress-controller-leader
- --ingress-class=nginx
- --configmap=kube-system/nginx-ingress-controller
复制代码
# 外网nginx-ingress配置声明:
spec:
template:
spec:
containers:
- args:
- /nginx-ingress-controller
- --default-backend-service=kube-system/nginx-ingress-external-default-backend
- --election-id=ingress-controller-leader
- --ingress-class=nginx-external
- --configmap=kube-system/nginx-ingress-external-controller
复制代码
二者的主要区别在于参数 --ingress-class
设置的值是不同的服务器
metadata:
name: www
annotations:
kubernetes.io/ingress.class: "nginx-external"
复制代码
kubectl exec ${POD_NAME} -n kube-system cat /etc/nginx/nginx.conf
查看配置文件中是否已经包含外网域名的相关配置,并在本地进行测试验证