使用ingress+service机制实现高可用负载均衡

ingress是k8s内置的7层反向代理的抽象,其自带了负载与代理寻址功能,通过对ingress controller的实现,可以方便的将内部资源以域名及路径的形式暴露出去,结合service可以轻松实现负载均衡及高可用。

k8s部署pod,会自动生成endpoint信息(容器的IP及端口清单),service指向endpoint。


关系图

对于外部资源(未使用k8s部署的,如外部的数据库或应用),也可以使用ingress+service+endpoint的模式实现高可用及负载均衡,我们用nginx模拟下这个场景:
分别在节点1,节点2用docker启用nginx:
映射到主机端口为8021

docker run --name nginx81 -p 8021:80 -d   -v  /data/nginx81/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx81/html:/usr/share/nginx/html -v /data/nginx81/conf.d:/etc/nginx/conf.d  nginx:latest

然后我们创建一个1.html文件
html正文,两个节点分别写各自节点名称,以区分。

node1:
node1 8021    1.html
node2:
node2 8021    1.html

然后我们预览两个地址:


节点1
节点2

通过ingress映射外部

---
kind: Endpoints
apiVersion: v1
metadata:
  name: edp-test
  namespace: my-system
subsets:
  - addresses:
#这里可以填写多个IP终结点IP,我们填写的是node1/node2的IP及端口
      - ip: 192.168.0.230
      - ip: 192.168.0.137
    ports:
      - port: 8021
---
apiVersion: v1
kind: Service
metadata:
  name: edp-test
  namespace: my-system
spec:
  ports:
    - port: 8021
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: edp-test
  namespace: my-system
spec:
  rules:
  - host: api.xxx.cn
    http:
      paths:
      - path: /edp
        backend:
          serviceName: edp-test
          servicePort: 8021
随机到节点2

随机到节点1

当我们把节点2停止:docker stop nginx81
再次多次刷新界面,发现并不会再往节点2分配资源,说明k8s的service会自动帮我们找到有效的节点。
k8s的ingress+service+endpoint+pod的模式,是自带注册中心,负载均衡和高可用的,通过这种模式,您可以免去引入很多第三方组件,能够快速实现微服务架构。

你可能感兴趣的:(使用ingress+service机制实现高可用负载均衡)