kubernetes集群实战——ingress服务部署、会话保持和TLS配置

1.Ingress 是什么?

Ingress 公开了从集群外部到集群内 services 的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。
一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的 Ingress 服务。

• Ingress由两部分组成:Ingress controller和Ingress服务。
• Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种 反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维 护了对应的 Ingress Controller
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第1张图片
官网:https://kubernetes.github.io/ingress-nginx/

2. ingress服务部署

下载ingress-nginx文件,得到deploy.yaml文件,编辑查看所需镜像:
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第2张图片
在私有仓库主机从外界拉取ingress服务所需镜像,打标签推送到我们的私有仓库上
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第3张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第4张图片
在deploy.yaml文件中更改镜像名称,与私有仓库中的镜像名相契合
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第5张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第6张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第7张图片
应用deploy.yaml,可以查看到刚刚添加的 Ingress-nginx 的状态是Active:

 kubectl get namespaces	##创建了一个以ingress-nginx命名的空间
 kubectl get pod -n ingress-nginx	##查看pod时指定namespace

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第8张图片

 kubectl get all -n ingress-nginx	##查看ingress-nginx下的所有信息资源
 kubectl get pod -n ingress-nginx -o wide	##查看pod运行在那些节点
 kubectl get svc -n ingress-nginx	##获取到端口 31181
 kubectl describe svc -n ingress-nginx ingress-nginx-controller	##查看服务详细信息

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第9张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第10张图片
测试:
物理机上访问,访问到的是404报错,这是因为ingress-nginx上没有资源信息kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第11张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第12张图片
结合ingress-nginx来做负载均衡

vim ingress.yml	##创建ingress服务,pod名称为ingress1,当在浏览器上访问www1.westos.org时负载到myservice上
 kubectl apply -f ingress.yml 	##应用ingress.yml
 kubectl get ingress		##pod地址在server4
 kubectl get svc -n ingress-nginx	##得到端口31181

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第13张图片kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第14张图片
测试:
先在物理机上添加解析,然后再访问
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第15张图片
进入pod内部查看已经自动添加www1.westos.org域名信息:
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第16张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第17张图片
添加www2.westos.org来验证可以自动添加域名解析信息:
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第18张图片
创建两个service:
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第19张图片kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第20张图片
给myservice2添加pod(这里使用deployment控制器控制pod)
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第21张图片kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第22张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第23张图片
== 添加ingress服务:www2.westos.org,当在浏览器上访问www2.westos.org时负载到myservice2上==kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第24张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第25张图片
添加www2.westos.org的解析
测试:成功访问

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第26张图片
进入pod内部查看自动创建www2.westos.org域名信息kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第27张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第28张图片

3. 使用HostNetwork本地端口直接访问服务

用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用 HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访 问服务
• 优点是整个请求链路最简单,性能相对NodePort模式更好。
• 缺点是由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress- controller pod。
• 比较适合大并发的生产环境使用。
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第29张图片
kubectl get all -n ingress-nginx ##查看ingress-nginx下所有信息kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第30张图片

vim deploy.yaml	##  编辑文件更改控制器类型为DaemSet,使用 HostNetwork直接把该pod与节点server4的网络打通
kubectl -n ingress-nginx delete deployments.apps ingress-nginx-controller	##删除deplyments.apps控制器
kubectl apply -f deploy.yaml	##应用deploy.yaml

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第31张图片kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第32张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第33张图片
kubectl get all -n ingress-nginx ##查看ingress-nginx下所有信息,可以看到控制器类型已经改为DaemonSetkubernetes集群实战——ingress服务部署、会话保持和TLS配置_第34张图片
删除ingress-nginx的servicekubernetes集群实战——ingress服务部署、会话保持和TLS配置_第35张图片
查看server4节点:打开了80和443端口kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第36张图片
不加端口直接访问服务,并实现负载均衡kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第37张图片

4. 实现会话保持

设置访问www1.westos.org时进行轮询,访问www2.westos.org时保持会话

kubectl apply -f deploy.yaml 	##将之前删除ingress-nginx的service重新加载进来
vim deploy.yaml	##设置访问www1.westos.org时进行轮询,访问www2.westos.org时保持会话
kubectl apply -f deploy.yaml	##应用deploy.yaml
kubectl get ingress	##pod成功分配到ingress1、ingress2

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第38张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第39张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第40张图片

kubectl describe ingress ingress1	##查看pod ingress1设置已经生效
kubectl describe ingress ingress2	##查看pod ingress2设置已经生效

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第41张图片
测试:
在浏览器上访问测试,访问www1.westos.org时是轮询调度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问www2.westos.org时会话保持,成功实现
在这里插入图片描述

5.Ingress TLS 配置

指定包含 TLS 私钥和证书的 secret Secret 来加密 Ingress
如果 Ingress 中的 TLS 配置部分指定了不同的主机,那么它们将根据通过 SNI TLS 扩展指定的主机名(如果 Ingress 控制器支持 SNI)在同一端口上进行复用。 TLS Secret 必须包含名为 tls.crt 和 tls.key 的密钥,这些密钥包含用于 TLS 的证书和私钥

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"	##生成tls.crt 和 tls.key 的密钥
kubectl create secret tls tls-secret --key tls.key --cert tls.crt	##指定包含TLS私钥和证书的secret Secret 来加密Ingress
kubectl get secrets

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第42张图片

vim tls.yml	##编辑tls.yml清单,Ingress 中的 TLS 配置指定www1.westos.org
kubectl apply -f tls.yml	##应用tls.yml
kubectl get ingress	##查看ingress信息
kubectl describe ingress nginx-tls

kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第43张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第44张图片
再次访问www1.westos.org时自动加密访问:
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第45张图片
在这里插入图片描述
进入pod内部查看自动创建www1.westos.org加密认证信息
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第46张图片
kubernetes集群实战——ingress服务部署、会话保持和TLS配置_第47张图片

你可能感兴趣的:(kubernetes集群实战——ingress服务部署、会话保持和TLS配置)