Kubernetes 經過 Ingress 暴露服務有兩種方案:html
replica=2
, 也就是隻啓動2個副本. 假設這2個容器啓動在 ttg12 和 ttg13 上. 這時候, 負載均衡服務器上轉發的流量也會打到 ttg14 上, 雖然這個節點自己並無對應的 pod, 但經過 Ingress, 也能正常地提供服務. 示意圖以下:本文示例部署一個 lb-tomcat9.faceless.cn
的域名指向 負載均衡服務器, 並經過 Ingress 提供服務.nginx
本地新建文件 lb-tomcat9-svc.yaml
:segmentfault
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat9-dev-dpl labels: app: tomcat9 env: dev spec: replicas: 2 selector: matchLabels: app: tomcat9 env: dev template: metadata: labels: app: tomcat9 env: dev spec: containers: - name: tomcat9 image: tomcat:9.0.37-jdk8-openjdk ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: tomcat9-dev-svc labels: app: tomcat9 env: dev spec: selector: app: tomcat9 env: dev ports: - name: nginx-port protocol: TCP port: 8080 targetPort: 8080
應用本配置文件:api
kubectl apply -f lb-tomcat9-svc.yaml
輸出:tomcat
deployment.apps/tomcat9-dev-dpl created service/tomcat9-dev-svc created
在本地新建 Ingress 配置 lb-tomcat9-ingress.yaml
, 將 lb-tomcat9.faceless.cn
域名下的全部流量分發給 tomcat9-dev-svc
服務:bash
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: lb-tomcat9-ingress spec: rules: - host: lb-tomcat9.faceless.cn # Ingress 的 `http` 端口爲 80, 對應在負載均衡配置文件中 **upstream** 模塊下配置的端口 http: paths: - path: / backend: serviceName: tomcat9-dev-svc servicePort: 8080
應用本配置文件:服務器
kubectl apply -f lb-tomcat9-ingress.yaml
輸出:app
ingress.networking.k8s.io/lb-tomcat9-ingress configured
注意 Ingress 除了部署資源以外, 還須要對應的 Ingress Controller. 本文使用 Nignx 出廠的 nginx/nginx-ingress
控制器. 可以使用 Kuboard 教程中的配置腳本安裝:負載均衡
kubectl apply -f https://kuboard.cn/install-script/v1.18.x/nginx-ingress.yaml
具體請參考: https://kuboard.cn/install/install-k8s.html#安裝-ingress-controller.less
另外關於 Nginx Ingress 的兩種不一樣實現, 請參考個人另外一篇博文: K8S Ingress控制器兩個實現版本(kubernetes-ingress 和 ingress-nginx)的區別.
先經過 kubectl get pods | grep tomcat9-dev-dpl
確認 2 個 pods 的狀態都已爲 Running
.
而後在本地經過 /etc/hosts
將 lb-tomcat9.faceless.cn
域名分別執行 ttg12 / ttg13 / ttg14 對應的 IP, 並訪問 http://lb-tomcat9.faceless.cn, 查看這3個IP是否都能正常返回.
本文負載均衡 (Load Balancer) 使用 Nginx 實現, 對應的配置文件爲:
# 這裏定義了一個名稱爲`lb_tomcat9_server`的`上游`, 即負載均衡的目標站點清單 upstream lb_tomcat9_server { server ttg12:80; server ttg13:80; server ttg14:80; } # 下面定義`lb-tomcat9.faceless.cn`站點, 將全部流量轉發到`lb_tomcat9_server` server { listen 80; listen [::]:80; server_name lb-tomcat9.faceless.cn; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://lb_tomcat9_server; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
更多細節可參考筆記: Docker 容器部署 Nginx 實現負載均衡