【Kubernetes系列】第6篇 Ingress controller - nginx元件介紹
1. 概述
在上一篇文章中我們介紹瞭如何通過helm進行安裝部署traefik元件,文中還提到常用的ingress controller除了traefik還有Nginx、HAProxy、Kong等,在本篇文章中我們就介紹如何安裝部署Nginx-ingress,只有在經過積累不同元件的使用經驗之後,我們才能更好的比較其優劣,形成最佳實踐。
2. nginx-ingress元件的安裝部署
2.1 通過helm查詢nginx-ingress
# step1: 通過helm查詢nginx-ingress
> helm search nginx-ingress
> helm inspect stable/nginx-ingress
2.2 映象下載及上傳
部分企業由於伺服器沒有外網訪問策略以及防火牆的原因無法獲取國外Docker映象,所以我們事先需要將所需映象準備好,並上傳到企業私有映象倉庫
# 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
2.3 元件部署
在上一篇部落格中,我們是採用
Deployment
模式部署的traefik元件,這次我們採用
DaemonSet
的模式來部署nginx-ingress元件
# 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
2.4 負載均衡配置及域名解析處理
本次我們採用DaemonSet部署nginx-ingress元件,並且使用了主機的80和443介面用來分別接收http和https請求,我們將相應的域名解析到nginx-ingress Pod所在的主機IP之後,就可以通過域名來進行相應的域名訪問了。
但上述配置方式無法做到高可用,當nginx-ingress的Pod例項故障或者其所在主機發生故障時,會導致相應的域名無法訪問,所以建議在公有云購買負載均衡裝置並配置相應的後端伺服器列表以實現高可用的目的。
2.5 安裝除錯
在上文中我們通過helm部署了一個wordpress應用,本文我們繼續通過該應用進行域名訪問,在本機控制檯輸入
> curl -i http://10.0.0.182 -H 'Host: blog.hankercloud.com'
,如果看到有正常返回則說明部署成功
3. 企業場景及解決方案
3.1 如何做內外網的隔離
- Step1: 我們首先部署了兩個ingress元件,其中之一是接收內網訪問請求,另外一個是接收外網訪問請求,相應配置如下:
# 內網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
設定的值是不一樣的
- Step2: 對於需要暴露到公網的域名,修改其ingress的定義,相應配置參考如下:
metadata:
name: www
annotations:
kubernetes.io/ingress.class: "nginx-external"
- Step3: 檢查是否配置成功,執行
kubectl exec ${POD_NAME} -n kube-system cat /etc/nginx/nginx.conf
檢視配置檔案中是否已經包含外網域名的相關配置,並在本地進行測試驗證
4. 參考資料
https://kubernetes.github.io/ingress-nginx/deploy/
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947382/viewspace-2659996/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Kubernetes系列】第5篇 Ingress controller - traefik元件介紹Controller元件
- 乾貨|Kubernetes叢集部署 Nginx-ingress ControllerNginxController
- ingress-nginx-controller部署NginxController
- Kubernetes 准入控制 Admission Controller 介紹Controller
- 【Kubernetes系列】第2篇 基礎概念介紹
- Kubernetes Ingress-nginx使用Nginx
- 使用 Nocalhost 開發 Kubernetes 中的 APISIX Ingress ControllerAPIController
- helm 安裝 nginx-ingress-controller v1.10.0NginxController
- k8s安裝nginx-ingress-controllerK8SNginxController
- k8s 新版本 部署 Ingress-nginx controllerK8SNginxController
- 第64篇 Kubernetes的簡單介紹
- 【Kubernetes系列】第7篇 CI/CD之元件部署元件
- Kubernetes Ingress
- Kubernetes Admission Controller 簡介 - 注入 sidacar 示例Controller
- Kubernetes 使用 Ingress-nginx 實現灰度釋出功能Nginx
- 【原創】Ingress-Nginx-Controller的Metrics監控原始碼改造簡析NginxController原始碼
- docker筆記26-ingress資源和ingress controllerDocker筆記Controller
- 介紹下NginxNginx
- [K8S 系列]k8s 學習一,Kubernetes 基本介紹及核心元件K8S元件
- Flutter 系列文章:Flutter Text 控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter Container 控制元件介紹FlutterAI控制元件
- Flutter 系列文章:Flutter Image 控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter Scaffold 控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter Icon 控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter Appbar 控制元件介紹FlutterAPP控制元件
- Flutter 系列文章:Flutter SliverAppbar 控制元件介紹FlutterAPP控制元件
- Flutter系列文章:Flutter RaisedButton控制元件介紹FlutterAI控制元件
- Flutter 系列文章:Flutter PlaceHolder 控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter FlutterLogo 控制元件介紹FlutterGo控制元件
- Flutter 系列文章:Flutter Row控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter Column 控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter MaterialApp 控制元件介紹FlutterAPP控制元件
- Flutter 系列文章:Flutter Drawer 控制元件介紹Flutter控制元件
- Flutter 系列文章:Flutter BottomNavigationBar 控制元件介紹FlutterNavigation控制元件
- kubernetes物件之Ingress物件
- Kubernetes Gateway API 介紹GatewayAPI
- 除錯 Ingress Nginx除錯Nginx
- Nginx 相關介紹Nginx