原创内容:转载请注明出处
尽管通过 NodePort 访问的操作尽管简单,但同时也存在着致命的问题:
通过云服务商的 LB 功能也可以达到相应的效果,同时也有一些小问题:
Ingress 事实上不是一种服务类型,它处于多个服务的前端,扮演着“智能路由”或者集群入口的角色
所以 Ingress 的基本功能包含了以下功能:
Ingress 资源是在 Kubernetes V1.1 中引入的
Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制
举个简单的例子, 我们从对应的 ingress 发送流量到对应的 Service 中
如下图所示:
在开始前先描述下 ingress 和 ingress-controllers 的区别:
针对 ingress-class 我们再补充几点:
试想一下,当我们的集群中存在多个 ingress-controllers (可以是不同的 控制器类型或者是同一种控制器但全局配置不同); 那么当前配置的这个 ingress 该交给谁来处理和解释呢?
这个时候就可以通过 ingress-class 来区分对应的ingress解析工作交给谁去处理
从 1.14 开始必须要设置对应的 IngressClass, 否则会报错
在 Kubernetes 1.18 版本引入 IngressClass 资源和 ingressClassName 字段之前,Ingress 类是通过 Ingress 中的一个 kubernetes.io/ingress.class 注解来指定的
近期针对 K8S ingress-nginx 的对应版本的变化
ingress-nginx 源码阅读链接 — 入口函数
Dockerfile 脚本内容
Dockerfile 脚本内容
ingress-controllers 创建成功后,会自动的在集群中创建指定数量的 Pod
此刻我们进入 Pod 中, 查看对应的进程树信息
bash-5.1$ pstree
dumb-init---nginx-ingress-c-+-nginx-+-2*[nginx---32*[{nginx}]]| `-nginx`-14*[{nginx-ingress-c}]bash-5.1$ pstree -p
dumb-init(1)---nginx-ingress-c(7)-+-nginx(27)-+-nginx(31)-+-{nginx}(67)| | |-{.....}(68)| | `-{nginx}(98)| |-nginx(32)-+-{nginx}(35)| | |-{.....}(36)| | `-{nginx}(66)| `-nginx(33)|-{nginx-ingress-c}(8)|-{.......}(9)`-{nginx-ingress-c}(99)bash-5.1$ ps
PID USER TIME COMMAND1 www-data 0:00 /usr/bin/dumb-init -- /nginx-ingress-controller --election-id=ingress-controller-leader-nginx --ingress-class=nginx --watch-ingress-without-class --controller-class=k8s.io/ingress-nginx --configmap=kube-system/nginx8 www-data 1:36 /nginx-ingress-controller --election-id=ingress-controller-leader-nginx --ingress-class=nginx --watch-ingress-without-class --controller-class=k8s.io/ingress-nginx --configmap=kube-system/nginx-configuration --tcp-s27 www-data 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/f138 www-data 0:58 nginx: worker process139 www-data 1:02 nginx: worker process140 www-data 0:00 nginx: cache manager process259 www-data 0:00 /bin/sh -c TERM=xterm-256color; export TERM; LANG=C.UTF-8; export LANG; [ -x /bin/bash ] && ([ -x /usr/bin/script ] && /usr/bin/script -q -c "/bin/bash" /dev/null || exec /bin/bash) || exec /bin/sh265 www-data 0:00 /bin/bash266 www-data 0:00 ps
如果获取不到 PPID 我们可以通过 top 指令来查看
根据上面得到的信息,我们就可以绘制出如下图所示的内容:
程序通过 dumb-init 启动了 nginx-ingress-controller, nginx-ingress-controller 唤起 nginx
针对nginx的相关进程启动顺序,和运行模式这里不多做介绍
相关资料查阅关键字: master-worker 进程模型
nginx-ingress-c 通过与 api server
交互,监听存储于 etcd 中的 ingress、service、endpoint 等资源的变化
当数据产生变化后则会自动的更新 nginx 对应的配置信息,并 reload nginx 进程; 在此过程中, Pod 和 容器都不会重新创建、重启
本文发布于:2024-02-05 02:53:29,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170722341362354.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |