k8s(五) ingress之集群统一访问入口

3,819 阅读2分钟

ingress有点类似微服务网关的入口,而service又是pod的入口。看下图 image.png 举个例子,假设我们部署一个电商平台,该平台有order,user,product三个服务。我们使用deployment部署2份order服务(橙色部分),部署3份user服务(绿色部分),部署3份product服务(灰色部分)。将各自deployment部署的pod暴露出一组service,这里就形成了3个service,且service层有自己的网络。接下来我们安装一个ingress。接下来我们开始访问整个服务构成的应用。每个服务都有单独的域名,我们访问order.atguigu.com就是访问订单服务,user.atguigu.com就是访问user服务,product.atguigu.com就是商品服务。当发起该域名请求时,ingress就知道你要访问的是那个service,该service接收到请求后就负载均衡给相应的pod。以下图为例,我们如果发起的是order.atguigu.com,ingress就会将此请求转发给service a。service又将此请求负载均衡到相应的pod。要想使用ingress就要安装ingress。 image.png

1.安装ingress

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml

#修改镜像
vi deploy.yaml
#将image的值改为如下值:
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/ingress-nginx-controller:v0.46.0

# 检查安装的结果
kubectl get pod,svc -n ingress-nginx

如果以上安装下载不了deploy.yaml的话,就使用ymal配置文件的方式部署,以下是deploy.yaml文件内容,自己在任意节点上新建一个ingress.yaml,然后复制以下内容(www.yuque.com/leifengyang… 第6部分的ingress安装) 创建成功 image.png 查看pod image.png 安装成功之后等待3-5分钟的样子容器就running status,这样的话我们k8s集群就有一个统一的网关入口。 查看service,发现http的80端口映射的是31525,而https的443则映射的是30427。注意,这里的ingress也是以NodePort的方式对外暴露的。 image.png 我们可以使用任意的节点ip+ingress的端口作为集群统一访问入口。【如果你使用的是云服务记得开启安全组端口】,我使用任意节点的ip+80映射的端口访问,这就相当于集群总网关层的http端口。 image.png 以30427端口访问就是集群内部的https端口 image.png 更多ingress的使用参考官方文档 kubernetes.github.io/ingress-ngi…

2.ingress域名访问的使用
2.1 部署2份hello-service和2份nginx-demo 在任意节点下新建test-ingress.ymal,内容如下
image.png 【参照上面给出的语雀笔记】 使用命令kubectl apply -f test-ingress.ymal创建成功 image.png

2.2 创建域名访问
在任意节点下创建一个test.ymal【我这个命名不是很好,不具备业务标识,大家可以命名成ingress-rule.yaml】内容如下【参照上面给出的语雀笔记】。大致的意思就是有2个host名,分别是hello.atguigu.com和demo.atguigu.com分别与之对应的service名是hello-service和nginx-demo。 image.png 使用命令kubectl apply -f test.ymal创建成功 image.png