在上一篇文章中咱們介紹瞭如何經過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
查看配置文件中是否已經包含外網域名的相關配置,並在本地進行測試驗證