一、iptables/ipvs

前面我们说到kube-proxy是基于iptables/ipvs的分布式L4负载均衡技术,但是有很多的需求场景是这种网络层的dnat不能提供的能力。
在这里插入图片描述
基于L4的服务

  • 每个应用独占ELB,浪费资源
  • 每个服务都需要创建DNS配置
  • 启动HTTPS,每个服务需要自己管理证书

二、ingress

ingress是基于L7应用层的负载均衡技术,在用户态应用层面提供了更多的功能支持。例如:

  • L7 path forwarding,请求路径的转发
  • http header rewrite
  • TLS termination

在这里插入图片描述
基于L7的ingress:

  • 多个应用共享ELB
  • 多个应用共享Domain,可采用静态DNS配置
  • TLS termination发生在ingress层,可集中管理证书。

也是需要通过service将外部流量转到集群内部,在指向ingress pod去做L7负载均衡,比如请求路径/a就转向a服务,/b就转向b服务。ingress根据hostname和path将流量转发到不同服务,使得一个负载均衡器用于多个后台应用

2.1 工作原理

ingress是一层代理,将流量转到不同的服务。类比传统反向代理软件nginx或者envoy,通常转发规则需要手动配置配置文件。而ingress是kubenetes的一个资源对象,是转发规则的抽象,只要定义好了ingress,那么ingress controller将会生成反向代理软件的转发配置文件。

三、发布ingress

首先需要在集群安装Ingress Controller,不同的代理软件提供了不同的Ingress Controller,以nginx为例。
1、下载Nginx Ingress Controller的部署文件:

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml

2、安装Ingress Controller

kubectl apply -f deploy.yaml

查看到Ingress Controller部署成功了
在这里插入图片描述
并生成了接收外部流量的service
在这里插入图片描述
该service接收到外部请求后,将交由ingress-nginx-controller pod处理。

3、配置ingress转发规则

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gateway
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: org.sxm.com
      http:
        paths:
          - path: "/"
            pathType: Prefix
            backend:
              service:
                name: httpserver-svc
                port:
                  number: 80

ingress规则绑定了请求域名和路径。
ingress-nginx-controller pod接收请求后根据转发规则,将请求转发到各backend服务。

4、访问外部流量统一入口
在这里插入图片描述
将请求转发到了后端服务httpserver-svc。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐