k8s

ingress总结

背景

下面我将以这个思维导图来总结一下Ingress。

简介

service是工作在L4的,如果有更高级的需求,比如根据用户或者不同的URI来转发到不同的路径,L4的service就无法实现。这时就可以通过L7的ingress来实现。

与L4 service的对比

L4 service

  • kube-proxy 基于 iptables rules 实现了分布式负载均衡。
  • kube-proxy 是一种 mesh,无论通过 podip,nodeport 还是 LB VIP 都经由 kube-proxy跳转至 Pod。
  • 每个应用独占 ELB(EIP),浪费资源。
  • 为每个服务动态创建 DNS记录,频繁的 DNS更新。
  • 支持 TCP 和 UDP,如果需要启动 HTTPS 服务,自己管理证书。
    file

L7 ingress

  • URL/http header rewrite。
  • L7 path forwarding。
  • 多个应用共享 ELB(EIP),节省资源。
  • 多个应用共享一个 Domain,可采用静态 DNS 配置。
  • TLS termination 发生在 Ingress层,可集中管理证书。
  • 增加了网络跳数,网络更复杂。
    file

工作原理

ingress

  • Ingress 是一层代理。
  • 负责根据 hostname 和 path 将流量转发到不同的服务上,使得一个负载均衡器用于多个后台应用。
  • Kubernetes Ingress Spec 是转发规则的集合。

ingress controller

  • 监听ingress对象,读取ingress配置,把配置转换成代理软件如nginx可以读取的配置,然后重启或者热加载来使配置生效。
  • 确保实际状态(Actual)与期望状态(Desired)一致。
  • 负载均衡配置。
  • 边缘路由配置。
  • DNS配置。

实例

查看ingress pod

file

ingress-nginx-ingress-controller-default-backend:如果外界访问的域名不存在的话,则默认转发到default-http-backend这个Service,其会直接返回404:

查看ingress配置文件

file

查看ingressClass

file

查看ingress服务

file

访问服务

ingress是nodePort类型,安全组放开80和443端口,域名备案后,即可直接通过域名访问。

curl -H "Host: wghdr.top" https://10.96.194.221 -k

file

访问路径

  • 外部服务首先通过dns解析域名到物理机的ip。
  • 访问物理机的80端口,即ingress的nodePort端口。
  • 通过kube-proxy转发到ingress-nginx-ingress-controller pod的80端口。
  • ingress-controller中的nginx服务解析nginx配置文件,根据request header匹配用户请求,决定把请求转发到哪个backend。
分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x