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服务的主要内容,如果未能解决你的问题,请参考以下文章

Linux企业运维高效技巧心得及分享

Linux企业运维——Kubernetesingress服务

Linux企业运维——DockerRegistry仓库

Linux企业运维——KubernetesPod资源清单

Linux运维是什么?行业前景如何?

Linux企业运维——KubernetesPod生命周期