xiaohanliang
Docker
Docker
  • hi
  • STORAGE DRIVER
    • 1. 什么叫联合挂载
    • 2. 镜像ID是从哪来的
    • 3. 如何组装出一个镜像
    • 4. 为什么有这么多fs@aufs
    • 5. 为什么有这么多fs@overlay
    • 6. 为什么有这么多fs@dm
    • 7. 正确安装devicemapper
  • EXEC DRIVER
    • 1. 资源限制-cgroup
    • 2. 制造小型监狱
    • 3. 切换根目录是什么概念
    • 4. 标准极简容器runC
    • 5. 尝试安装runc工具
  • KUBERNETES NETWORK
    • 0. [WIP]我想串联容器网络的故事
    • 1. 容器网络是什么样的网络
    • 2. cnm认为应该怎样让容器组网
    • 3. 为什么会有一大堆cni插件
    • 4. 为什么要设计出pod
    • 5. 怎样形成一个服务
    • 6. Service就是iptables规则
    • 7. IPVS也能实现Service
    • 8. 从集群外访问服务-nodeport
    • 9. 从集群外访问服务-ingress
    • 10. 想要把域名变成IP
    • 11. DNS是怎么实现的
    • 12. 最常见的方案@flannel
    • 13. 使用tun设备封包@flannel
    • 14. 使用vxlan设备封包@flannel
    • 15. 可不可以不封包@flannel
Powered by GitBook
On this page
  • 我们有什么问题
  • 为了能让我们的Ingress运行起来

Was this helpful?

  1. KUBERNETES NETWORK

9. 从集群外访问服务-ingress

我们有什么问题

Service/Nodeport 已经能暴露我们的服务了, 但 Service 因为使用iptable实现, 也只能识别的出IP报头里的属性, 换句话说, 任何http协议中的特性全都做不了, 比如: 我想以HTTP中的Cookie为线索做粘性会话, 比如某个已登录的用户(cookie已经set上了)只跟一个pod会话, 使得日志统一集中在同一个pod上. 这个需求交给Service有办法做吗? 没有, 因为超过IP级别以上的全都识别不了.

Ingress可以完成以上需求, ingress按照某种协议解析你包里的内容, 并按照内容的某些属性, 去转发给指定Service, 比如现在有一个 ingress 可以解析包里的HTTP协议, 并根据HTTP包里的Path属性, 路由到不同的Service上, 那么这就是一个nginx类型的Ingress. 意思就是, ingress 是一个工作在高级协议上的转发器:

  • 比如一个工作在HTTP级别的转发器, 即包按照HTTP协议解析, 读懂这个包里的内容, 按照Path / Cookie 转发到不同的Service上, 比如 Path=login 就转发到登录Service上, path=forum 就转发到论坛Service上, 这种情况下这个Ingress就是nginx

  • 理解成一个能读懂 MySQL 协议并, 并按照MySQL包里的某些内容转发, 这种情况下Ingress同样可以是 Envoy

为了能让我们的Ingress运行起来

一个ingress定义出一个ingress对象, 并指明path与service的对应关系. 随后IngressController(就是pod) 监听并发现了这个新创建出来的 ingress对象, 根据配置里path/service的对照关系, 生成一份 nginx.conf 配置文件, 并令nginx按照最新的配置文件运行, 简单来说 IngressController 负责实现ingress中定义出的规则.

那么到了这一步, nginx进程已经跑起来了, 并按照你在ingress对象里定义出的规则运行着. 访问到这个nginx进程的http请求会按照要求前往不同的service, 但还是那个问题, 在集群内你想去哪个Service这都没问题, 但如果是集群外访问你还要定义出NodePort来让集群外的请求, 也能访问这个Service

Previous8. 从集群外访问服务-nodeportNext10. 想要把域名变成IP

Last updated 4 years ago

Was this helpful?