Linux企业运维——Kubernetes(八)ingress服务

一、ingress简介

单独用service暴露服务的方式,在实际生产环境中不太合适

ClusterIP的方式只能在集群内部访问。
NodePort方式的话,测试环境使用还行,当有几十上百的服务在集群中运行时,NodePort的端口管理是灾难。
LoadBalance方式受限于云平台,且通常在云平台部署ELB还需要额外的费用。

ingress可以简单理解为service的service,他通过独立的ingress对象来制定请求转发的规则,把请求路由到一个或多个service中。这样就把服务与请求规则解耦了,可以从业务维度统一考虑业务的暴露,而不用为每个service单独考虑。

Kubernetes 里的Ingress 服务是一种全局的、为了代理不同后端Service 而设置的负载均衡服务。
Ingress由两部分组成:Ingress controller和Ingress服务。
Ingress Controller 会根据你定义的Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的Ingress Controller。
在这里插入图片描述

二、ingress的安装部署

在真实主机上将ingress的安装包发送给server1,将ingress-nginx部署所需资源清单文件deploy.yaml发送到server2的/root/ingress目录下
在这里插入图片描述
server1加载ingress压缩包,可以看到导入了如下两镜像
在这里插入图片描述
在仓库新建项目ingress-nginx
在这里插入图片描述
server1将ingress相关镜像上传至仓库
在这里插入图片描述
上传成功,在仓库可以看到两个镜像
在这里插入图片描述
server2编辑deploy.yaml文件,修改镜像地址为本地harbor仓库
在这里插入图片描述
然后应用配置
在这里插入图片描述
查看所有namespace,看到新创建的ingress-nginx
在这里插入图片描述
查看ingress-nginx命名空间内的所有pod,controller正在运行,端口为30552
在这里插入图片描述
真实主机测试访问server2的30552端口,访问成功
在这里插入图片描述

三、ingress管理多个service

编写ingress.yaml文件,指定www1.westos.org对应的服务是myapp-svc
在这里插入图片描述
删除之前的lb-svc服务
在这里插入图片描述
编辑svc.yaml文件,名称为myapp-svc,对应镜像是v1版本
在这里插入图片描述
在这里插入图片描述
应用编辑后的svc.yaml配置文件,查看服务,看到新创建的myapp-svc服务,集群ip是10.99.139.233
在这里插入图片描述
删除ns.yaml配置文件,删除之前实验的相关ns,查看网络策略,已经清空
在这里插入图片描述
查看myapp-svc的详细信息,ip为10.99.139.233,测试访问,可以看到访问成功
在这里插入图片描述
现在应用一开始编辑的ingress.yaml配置,可以看到ingress-demo被创建
在这里插入图片描述
查看ingress-demo详细信息,可以看到域名为www1.westos.org,后端服务是myapp-svc,有三个服务器负载均衡
在这里插入图片描述
修改 ingress-nginx-controller的服务类型为LoadBalancer
在这里插入图片描述
查看服务的类型已经变成了LoadBalancer,外部访问地址为172.25.19.10
在这里插入图片描述
真实主机访问其外部地址,访问成功,在hosts文件可以看到其域名解析关系
在这里插入图片描述
真实主机访问www1.westos.org,访问成功且负载均衡
在这里插入图片描述
编辑deployment.yaml文件,指定nginx的镜像为myapp:v1,副本为3个
在这里插入图片描述
在这里插入图片描述
列出所有pod并查看标签,可以看到现在有3个标签为myapp的pod和3个标签为nginx的pod
在这里插入图片描述
编辑svc.yaml,配置nginx服务和myapp服务
在这里插入图片描述
应用配置,查看服务可以看到这两个
在这里插入图片描述
查看myapp服务和nginx服务的详细信息,可以看到后端endpoints都有3个
在这里插入图片描述
在这里插入图片描述
编写ingress.yaml文件,赋予域名匹配,用于匹配这两个service
在这里插入图片描述
应用该配置,可以看到现在有两个ingress信息
在这里插入图片描述
真实主机为www1.westos.org和www2.westos.org配置域名解析
在这里插入图片描述
测试访问域名,可以访问到对应的service,负载均衡
在这里插入图片描述
连接到ingress-nginx-controller容器,查看nginx.conf配置文件,可以看到nginx的服务代理
在这里插入图片描述
controller始终监听k8s的信息变更,把所作的配置动态加入ingress的/etc/nginx下的nginx配置文件
在这里插入图片描述
在这里插入图片描述
总体思路是用Deployment部署ingress-controller,创建一个type为LoadBalancer的service关联这组pod。LoadBalancer的service绑定了公网地址。只要把域名解析指向该地址,就实现了集群服务的对外暴露。

四、ingress的TLS配置

现在想通过443端口HTTPS方式来访问服务
查看所有svc,删除之前的ingress.yaml配置
在这里插入图片描述
将www2.westos.org的ingress部分注释掉
在这里插入图片描述
应用ingress.yaml配置,查看ingress信息看到现在只有myapp的
在这里插入图片描述
在ingress目录下生成证书和密钥
在这里插入图片描述
用生成的证书和key创建tls-secrets并查看,将tls-secrets放入集群资源中
在这里插入图片描述
编辑ingress.yaml,使得用户在访问指定域名时重定向到指定tls端口,利用给定的tls-secrets走加密路径访问
在这里插入图片描述
应用配置,查看ingress-myapp详细信息,可以看到已经配置了TLS加密
在这里插入图片描述
测试访问,curl不支持重定向(需要加-k参数),浏览器支持
在这里插入图片描述
在这里插入图片描述

五、ingress认证

安装httpd-tools认证生成插件
在这里插入图片描述
创建认证用户和密钥,导入到新创建的secret中
在这里插入图片描述
查看所有secrets,可以看到我们刚才创建的secret
在这里插入图片描述
编辑ingress.yaml,在元数据加入认证设置,设定认证类型、认证的secrets
在这里插入图片描述
应用配置,查看ingress-myapp详细信息,可以看到认证模块已经添加
在这里插入图片描述
测试访问www1.westos.org自动跳转到https://www1.westos.org,且需要输入认证信息
在这里插入图片描述

六、ingress地址重写

目标是将根目录重定向到hostname.html
在这里插入图片描述
在这里插入图片描述
连接到myapp-deployment容器,查看default.conf配置文件
在这里插入图片描述
/hostname.html和/etc/hostname二者是相互对应的
在这里插入图片描述查看/etc/hostname,内容是myapp-deployment
在这里插入图片描述
编辑ingress.yaml配置文件,将根目录定向到hostname.html
在这里插入图片描述
应用配置
在这里插入图片描述
测试访问www1.westos.org,查看http请求头可以看到地址重写为www1.westos.org/hostname.html,改变了默认发布目录
在这里插入图片描述
上述方式写死路径,在以后修改的时候会很不方便,我们可以使用下面方法动态读取路径
/$2表示抓取第二列输入内容,指向页面一定是在后端真实存在的,path: /westos(/|$)(.*) 自动抓取westos后的内容。

  • $2匹配的时(.*),something关键字触发重定向机制
  • $2指向页面一定是在后端真实存在的
  • 访问时两次重定向,首先是地址重写,接着进行加密路径访问

在这里插入图片描述
应用配置
在这里插入图片描述
使用真实主机测试访问www1.westos.org显示404,找不到页面;访问www1.westos.org/westos可以正常访问
在这里插入图片描述
使用浏览器访问,可以看到相同的效果,www1.westos.org/westos可以访问成功
在这里插入图片描述
在这里插入图片描述
既有TLS也有地址重写的情况下,哪一个会先触发呢
修改ingress.yaml配置文件
在这里插入图片描述
应用配置
在这里插入图片描述
测试访问,可以看到先进行了重定向,再触发了TLS
在这里插入图片描述

在这里插入图片描述

Logo

一站式 AI 云服务平台

更多推荐