一、 ingress 原理

1、数据流向

ingress为七层负载均衡,理解为nginx。源于官网的数据流向图,客户端访问进入ingress,ingress根据域名进行解析 ,随后找到关联的service服务获取pod信息,直接代理至pod节点

2、ingress 模式 hostnetwork nodeport

hostnetwork模式:


每个节点都创建一个ingress-controller的容器,容器的网络模式设为hostNetwork。访问请求通过80/443端口将直接进入到pod-nginx中。而后nginx根据ingress规则再将流量转发到对应的web应用容器中。

nodeport模式 :


访问流量先通过nodeport进入到node节点,经iptables (svc) 转发至ingress-controller容器,再根据rule转发至后端各业务的容器中。

二、部署

1、hostnetwork模式

1) 下载yaml文件

wget  https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml

2) 修改镜像

cp mandatory.yaml mandatory.yaml_backquay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0改为,registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.30.0 3) 先把镜像拉取下来docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.30.0

3) 修改为hostnetwork模式

vim mandatory

4) 部署

kubectl apply -f mandatory.yaml

5) ingress-nginx pod 随机分配检验
ingress-nginx pod 随机被调配到node节点,新加nod02节点,再重新部署

kubectl apply -f mandatory.yaml


6) 修改为daemon-set模式

ingress-controller pod 在所有节点都有部署

7) 使用标签分组部署ingress-controller
找一组专用于ingress入口的node节点做为流量入口,使用10.0.0.104做为流量入口。对于亲和性的配置需要k8s v1.10+

1>nod02做为ingress 专用节点,打标签

kubectl get nodes --show-labelskubectl label nodes nod02 httpin=ingressforkubectl label nodes nod02 httpin=podforingress --overwrite

2>daemon-set,亲和性配置
根据 nodeselector配置亲和性,node节点配置设置limit上限


3>apply

kubectl apply -f mandatory.yaml

pod被调度到nod02节点。(如果使用label 的 key value配置,配置错误不会报错并且配置不会生效,命名空间看不到任何pod)

2、nodeport 模式部署

nodeport 可以使用deploy部署或者helm部署,此处使用helm部署

1) 添加helm依赖

helm repo add nginx-stable https://helm.nginx.com/stablehelm repo list helm search repo nginx-ingress


2)将依赖拉到本地,修改nodeport

helm pull nginx-stable/nginx-ingresstar xf nginx-ingress-0.8.1.tgzvim ./nginx-inress/values.yaml


3) 安装

kubectl create namespace ingress-nginxhelm install ingress-nginx ./nginx-ingress -n ingress-nginx
[root@k8s01 ingress]# helm install ingress-nginx ./nginx-ingress -n ingress-nginxError: cannot re-use a name that is still in use[root@k8s01 ingress]# helm uninstall ingress-nginx -n ingress-nginxrelease "ingress-nginx" uninstalled

kubectl get pods -o wide -n ingress-nginxkubectl get svc -n ingress-nginx

三、结构

ingress入口分组节点用于流量入口,外部必然是负载均衡。现在大部分是云环境,服务暴露大部分通过4层7层SLB,deployment部署通过加载annotation,loadbalance-id 实现对4层或者7层关联。或者直接使用ingress来实现7层负载。不论什么环境考虑不外乎两点,高并发大流量必然带来的是高可用性以及横向扩展能力的需求。

©著作权归作者所有:来自51CTO博客作者X糊涂仙儿的原创作品,如需转载,请注明出处,否则将追究法律责任

我们一起来让这个世界有趣一点

赞赏

0人进行了赞赏支持

更多相关文章

  1. 在复杂业务体系中DevOps理论及方法的实践
  2. 循环双链表(C语言,使用头节点)
  3. 反向代理服务器:为什么用,怎么用,如何用?
  4. 不可不知的zookeeper小工具-zkui
  5. Emmet 语法规则
  6. 设计思想赏析-分布式id生成算法-雪花算法
  7. CDN加速原理
  8. Zookeeper 的 8 大典型应用场景,你都知道哪些?
  9. 自动化运维之日志这件“小”事

随机推荐

  1. android 指纹
  2. 最新android版本对应的API等级
  3. 环形ProgressBar特效
  4. ListView 圆角
  5. Handler工作机制【简】——学习笔记
  6. Android——获取网络图片
  7. android之Toolbar使用详解
  8. 日历
  9. 【Android】移动GIS开发必备(文档、帮助、
  10. 形状图形(shape)