网站首页 > 博客文章 正文
作者: 徐良永
目录
?
① 先看一个ingress.yaml文件
② ingress controller是什么
③ 外部流量如何接入k8s集群
④ 微服务的接入
1 先看一个ingress.yaml文件
下面是一个ingress文件
重点看一下rules部分
apiVersion: extensions/v1beta1 kind: Ingress metadata: labels: app: ingress name: ingress namespace: pre-release annotations: # ingress.kubernetes.io/rewrite-target: / spec: rules: # host 域名 - host: bj-zw-k8s.preview.local http: paths: # url路径 - path: /dssresources #对应的后端服务 包括服务名和端口 backend: serviceName: dss-resources-svc servicePort: 80
这个rules部分的意思是这样的:
- http请求的host头为bj-zw-k8s.preview.local将被匹配
- http请求的path以/dssresources 开头将被匹配
如 http://bj-zw-k8s.preview.local/dssresources/xxxxx 会被匹配
那么请求被匹配后由谁来处理呢 ---- backend
- backend.serviceName 对应后端服务名称
- backend.servicePort 对应后端服务端口
这样请求
http://bj-zw-k8s.preview.local/dssresources/xxxxx
就被转发到 对应的backend了
看完了这个ingress文件,是不是感觉与nginx的配置有点类似
实际上这个ingress配置文件 会被翻译成nginx.conf
这个翻译工作由ingress controller 完成
2 ingress controller是什么
重点:ingress controller 会感知所有namespace的ingress资源文件
用户执行
kubectl apply ingress.yaml
文件后 k8s感知到变化就调用 ingress controller 把它翻译成nginx.conf
并写到nginx pod中,pod的名字默认nginx-ingress-controller开头
如下
上图可以看到有三个pod 实际上pod里面的容器就是nginx
我们进入pod看一下nginx配置文件
kubectlexec-it nginx-ingress-controller-65c6984c4-zlpz9 /bin/bash -n ingress-nginx
执行后会进入容器,
cat/etc/nginx/nginx.conf
会看到如下配置
这段配置就是由ingress.yaml配置解析后生成的
3 外部流量如何接入k8s集群
如下图
k8s集群内启动三个nginx
但是外部流量如何接入进来呢?
这里要引入k8s Service组件的概念,Service有三种类型:
ClusterIP,NodePort,LoadBalancer
我们这里要使用LoadBalancer类型引入外部流量
配置文件如下
externalIPs 通过svc创建,在指定的node上监听端口
下表指定了三个node来监听 ,监听端口分别是 80 和 443
这样请求到10.20.18.135:80 的流量会被引入到k8s集群
apiVersion:v1kind:Servicemetadata:name:ingress-nginxnamespace:ingress-nginxspec:type:LoadBalancerexternalIPs:-10.20.18.135-10.20.18.136-10.20.18.137ports:-name: httpport:80targetPort:80protocol:TCP-name: httpsport:443targetPort:443protocol:TCPselector:app.kubernetes.io/name:ingress-nginx?
流量引入后会被nginx接收分发,如下图
4 微服务的接入
流量引入后,接下来就是分发到各个微服务了,比如上面的ingress文件中的
path:/dssresources
会被分发到Service
backend:serviceName:dss-resources-svcservicePort:80
我们还是画图来直观的感受一下
实际上上图中的 Service (dss-resources-svc)是用于服务发现的,真正调用下面的pod时并不会经过service这层,而是直连pod
End
猜你喜欢
- 2024-09-11 K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?
- 2024-09-11 从零开始入门 K8s | Kubernetes 存储架构及插件使用
- 2024-09-11 「云原生」Spark on k8s 讲解与实战操作
- 2024-09-11 K8S扫盲什么是云?什么是云架构?什么是云原生?什么是K8S?
- 2024-09-11 K8S | 核心原理分析(k8s原理图)
- 2024-09-11 《深入浅出Prometheus》 原理、应用、源码与拓展详解
- 2024-09-11 Kubernetes原理最全详解(图文全面总结)
- 2024-09-11 Kubernetes(k8s)CNI(flannel)网络模型原理
- 2024-09-11 「云原生」k8s 中的 hostNetwork 和 NetworkPolicy 讲解与实战操作
- 2024-09-11 「云原生」Kubernetes(k8s)最完整版环境部署(V1.24.1)
你 发表评论:
欢迎- 06-23MySQL合集-mysql5.7及mysql8的一些特性
- 06-23MySQL CREATE TABLE 简单设计模板交流
- 06-23MYSQL表设计规范(mysql设计表注意事项)
- 06-23MySQL数据库入门(四)数据类型简介
- 06-23数据丢失?别慌!MySQL备份恢复攻略
- 06-23MySQL设计规范(mysql 设计)
- 06-23MySQL数据实时增量同步到Elasticsearch
- 06-23MySQL 避坑指南之隐式数据类型转换
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)