Kubernetes提供了兩種內建的雲端負載均衡機制用於發佈公共應用,一種是工做於傳輸層的Service資源,它實現的是TCP負載均衡器;另外一種是Ingress資源,它實現的是HTTP(S)負載均衡器。linux
今天咱們來重點討論Ingress資源。HTTP(S)負載均衡器是應用層負載均衡機制的一種,支持根據環境作出更好的調度決策。與傳輸層調度器相比,它提供了可自定義URL映射和TLS等功能,並支持多種健康狀態檢查機制。nginx
Ingress是Kubernetes API的標準資源類型之一,它其實就是一組基於DNS名稱或URL路徑把請求轉發至指定的Service資源的規則,用於將集羣外部的請求流量轉發至集羣內部完成服務發佈。然而,Ingress資源自身並不能進行「流量穿透」,它僅是一組路由規則的集合,這些規則要想真正發揮做用還須要其餘功能的輔助,如監聽某套接字,而後根據這些規則的匹配機制路由請求流量。這種可以爲Ingress資源監聽套接字並轉發流量的組件稱爲Ingress Controller。api
1、部署Helm瀏覽器
Helm是一個包管理工具, 把Kubernetes資源(好比deployments、services或 ingress等) 打包到一個chart中,方便將其chart保存到chart倉庫用來存儲和分享, Helm支持發佈應用配置的版本管理, 使發佈可配置, 簡化了Kubernetes部署應用的版本控制、打包、發佈、刪除、更新等操做。app
安裝Helm負載均衡
一、官網下載Helm二進制文件,當前最新版本爲2.14.0;工具
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64.tar.gz
二、解壓縮文件並將目錄中二進制文件移動到/usr/local/bin/下;測試
tar -zxvf helm-v2.14.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm
三、爲Tiller添加權限,詳見Role-based Access Control,新建rbac-config.yaml,內容以下:google
apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
執行create命令:url
kubectl create -f rbac-config.yaml
四、初始化 Helm 並安裝 Tiller 服務
helm init --upgrade --service-account tiller --tiller-image sapcc/tiller:v2.14.0
五、查看helm版本,出現如下信息,確認安裝成功:
Client: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
六、chart列表
helm repo update
七、測試chart是否可用
helm search
安裝nginx-ingress
一、執行helm install命令
helm install stable/nginx-ingress --name my-nginx --set rbac.create=true
--name:爲安裝的應用命名
二、查看helm 列表
三、查看ingress的service
kuberctl get svc
3、部署nginx實例應用
部署nginx的deployment
一、編輯nginx-app.yaml文件
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginxdemos/hello:latest ports: - containerPort: 80
二、執行create建立命令
kubectl create -f nginx-app.yaml
三、檢測deployment部署狀況
kubectl get deployment nginx-deployment
爲nginx的deployment建立service
一、執行expose命令
kubectl expose deployment nginx-deployment --target-port=80 --port=80 --protocol=TCP --name=jdc-test
二、確認服務建立完成
kubectl get svc
爲service建立ingress
一、編輯 ingress-nginx.yaml文件
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: jdc-ingress-controller-test annotations: metadata.annotations.kubernetes.io/ingress.class: "nginx" spec: rules: - host: test.nginx-ingress.jdc-test http: paths: - path: / backend: serviceName: jdc-test servicePort: 80
二、執行create建立命令
kubectl create –f ingress-nginx.yaml
三、查看ingress部署狀況
kubectl get ingress
四、在客戶端添加靜態解析,公網IP是nginx controller的service公網IP,域名是ingress的host:test.nginx-ingress.jdc-test
五、瀏覽器輸入url http://test.nginx-ingress.jdc-test/jdc-test訪問測試
歡迎點擊「連接」瞭解京東雲更多精彩內容