一。ingress的介紹
對于NodePort和LoadBalance,這兩種方法,都有缺點:
1.NodePort方式缺點會占用很多集群的端口,當集群服務變多的時候,缺點更加顯著
2.LB的缺點就是每一個service都需要一個LB,浪費,麻煩,并且需要K8S之外的設備
基于上面兩種情況,K8S提供了ingress資源對象,ingress只需要一個nodeport或者一個LB就可以滿足暴露多個service需求,實際上,ingress相當于一個7層負載均衡器,是K8S對反向代理的一個抽象,他的工作原理類似于nginx,可以理解為在ingress里建立多個映射規則,ingress controller通過監聽這些配置規則并且轉化為nginx反向代理,然后對外提供服務,在這李有兩個給核心概念:
1.ingress:K8S的一個對象,作用是定義請求如何轉發到service的規則
2.ingress controller:具體實現反向代理負載均衡的程序,對ingress定義規則進行解析,根據配置的規則來實現請求轉發,事項方式很多:nginx,haproxy等
二。Ingress的工作原理:
1.用戶編寫ingress規則,說明哪一個域對應K8S集群的哪一個服務
2.ingress控制器動態感知ingress服務規則的變化,然后生成一段相應的nginx反向代理配置
3.ingress控制器會將生成的nginx配置寫入到一個運行著nginx的服務中,并動態更新
4.到此為止,其實真正的工作就是nginx了,內部配置了用戶定義的請求轉發規則
三。環境的準備:
1.下載配置文件:wget -c https://gitee.com/kong-xiangyuxcz/svn/releases/download/ingress-nginx-controller-v1.13.1/deploy.yaml
445 ? ? ? ? image: ingress-nginx/controller:v1.11.2
546 ? ? ? ? image: ingress-nginx/kube-webhook-certgen:v1.4.3
599 ? ? ? ? image: ingress-nginx/kube-webhook-certgen:v1.4.3
kubectl apply -f deploy.yaml:啟用yaml
kubectl get?-f deploy.yaml:刪除yaml
四。ingress的用法:
準備工作:
kubectl create deployment myappv1 --image nginx:1.17.1 --dry-run=client -o yaml > myappv1.yaml:創建一個控制器
kubectl create service clusterip myappv1 --tcp 80:80 --dry-run=client -o yaml >> myappv1.yaml:創建servie服務
--dry-run=client
模擬執行命令(客戶端 dry run),不會實際創建服務,僅生成配置
?cp myappv1.yaml myappv2.yaml:創建兩個yaml
運行結果:
使用ingress進行負載均衡:
1.?kubectl -n ingress-nginx get ingressclasses.networking.k8s.io:查看自己所在的類
2.kubectl create ingress ingress-test --class nginx --rule="/=myappv1:80" --dry-run=client -o yaml > ingress-test.yml:生成ingress文件
3.進行檢測:
4.測試:
五。ingress基于路徑的訪問:
1.首先刪除以前的ingress,避免沖突:
2.創建基于路徑的ingress文件:
3.檢測結果:
六。基于域名的訪問:
測試:
七。建立tls加密
1.建立私鑰和證書:openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 365 -subj "/CN=nginxsvc/0=nginxsvc" -out tls.crt
2.建立資源存儲,假如集群:kubectl create secret tls web-tls-secret --key tls.key --cert tls.crt
3.查看secret內容:?kubectl get secrets web-tls-secret -o yaml
4.查看類型:
5.進行配置:
6.測試:
七。建立auth認證:
1.下載軟件:?
dnf install httpd-tools
2.建立加密用戶
?htpasswd -cm auth admin
3.提取到集群空間,generic存儲任意鍵值對形式的敏感數據
kubectl create secret generic auth-web --from-file auth
4.查看加密詳細內容:
kubectl get secrets auth-web -o yaml
5.編寫yml文件:
6.測試:
八:rewirte重定向: