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 实现负载均衡