Linux企业运维——Kubernetesingress服务
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Kubernetesingress服务相关的知识,希望对你有一定的参考价值。
Linux企业运维——Kubernetes(八)ingress服务
文章目录
1、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。
2、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端口,访问成功
3、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绑定了公网地址。只要把域名解析指向该地址,就实现了集群服务的对外暴露。
4、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参数),浏览器支持
5、ingress认证
安装httpd-tools认证生成插件
创建认证用户和密钥,导入到新创建的secret中
查看所有secrets,可以看到我们刚才创建的secret
编辑ingress.yaml,在元数据加入认证设置,设定认证类型、认证的secrets
应用配置,查看ingress-myapp详细信息,可以看到认证模块已经添加
测试访问www1.westos.org自动跳转到https://www1.westos.org,且需要输入认证信息
6、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后的内容。
应用配置
使用真实主机测试访问www1.westos.org显示404,找不到页面;访问www1.westos.org/westos可以正常访问
使用浏览器访问,可以看到相同的效果,www1.westos.org/westos可以访问成功
既有TLS也有地址重写的情况下,哪一个会先触发呢
修改ingress.yaml配置文件
应用配置
测试访问,可以看到先进行了重定向,再触发了TLS
以上是关于Linux企业运维——Kubernetesingress服务的主要内容,如果未能解决你的问题,请参考以下文章