k8s ingress、istio网关

k8s ingressk8s ingress、istio网关_第1张图片

k8s ingress、istio网关_第2张图片

ingress 三大组件
1负载均衡器

nginx,Haproxy之类的

2ingress controller

ngress Controller实质上可以理解为是个监视器,Ingress Controller通过不断地跟Kubernetes API打交道,实时的感知后端Service、Pod等变化,然后更新反向代理负载均衡器。

3ingress

配置文件,哪个域名对应哪个服务。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-test-ingress   # ingress 名称
  namespace: default        # 命名空间

spec:
  rules:
  # 域名
  - host: k8s.nginx.com
    http:
      paths:
      - path: /
        backend:
          # 后端service
          serviceName: nginx-service
          # service 端口
          servicePort: 80
总结

在边缘放置一个nginx,然后弄一个监视器叫ingress controller时时刻刻监视着k8s里service、pod变化,当我们想让foo.bar.com/foo请求转发到foo服务,我们需要写一个映射关系,这个映射关系就是ingress,然后ingress controller 根据 ingress 和 service、pod生成nginx配置,然后更新反响代理服务器。

istio 网关

k8s ingress、istio网关_第3张图片

IngressGateway

Istio IngressGateway 的功能与 Kubernetes Ingress 类似,IngressGateway 部署是一个基于 Envoy 代理的封装,也是类似nginx

Gateway

Gateway 资源是用于配置 IngressGateway 的一种 Kubernetes 的自定义资源,Istio Gateway资源本身只能配置L4-L6的功能,例如暴露的端口,TLS设置等。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "httpbin.example.com"
VirtualService

Gateway 可与 VirtualService 绑定,在 VirtualService 中可以配置七层路由规则,例如按比例和版本的流量路由,故障注入,HTTP 重定向,HTTP 重写等所有 Mesh 内部支持的路由规则。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
  - "httpbin.example.com"
  gateways:
  - httpbin-gateway
  http:
  - match:
    - uri:
        prefix: /status
    route:
    - destination:
        port:
          number: 8000
        host: httpbin
总结

Istio IngressGateway 属于 8s ingress的加强版,可以指定复杂的流量路由规则,如流量拆分或流量镜像等,而且将l4-l6与l7解耦,而且可以从控制平面进行配置。

架构方案

虽然Ingress Controller通过七层网关为后端的多个Service提供了统一的入口,但由于其部署在集群中,因此并不能直接对外提供服务。实际上Ingress需要配合NodePort和LoadBalancer才能提供对外的流量入口,如下图所示:
k8s ingress、istio网关_第4张图片
istio 入口网关前面也要有一个负载均衡,比如80端口的请求代理到网关A,60端口的请求代理到网关B。
k8s ingress、istio网关_第5张图片
因此,我们需要在k8s集群前再放置一个负载均衡器,例如loadbalancer,对于没有loadbalancer的我们可以用搭一个负载均衡集群保证集群的高可用。

k8s ingress、istio网关_第6张图片

k8s ingress、istio网关_第7张图片

参考:
https://cloudnative.to/blog/how-to-pick-gateway-for-service-mesh/
https://mp.weixin.qq.com/s/Dt4ge1H4JXhHS91vRMBUWA
https://zhuanlan.zhihu.com/p/142380204?utm_source=wechat_session&utm_medium=social&utm_oi=675340860045004800&wechatShare=1&s_r=0
https://mp.weixin.qq.com/s/fPjwSqIt4rvHcnK-LNjTDw

你可能感兴趣的:(k8s,nginx,负载均衡,运维)