K8S---v1.23.5版本部署Ingress
前言最新有新的需求,原来的K8S版本(v1.18.1)已经不能满足需求了。因此部署了新的K8S版本—v1.23.5。前期基础部署,dashboard部署,metrics-server部署都可以,但是当部署到Ingress时,发现和原来的不一样了,因此记录一下。环境说明K8S:v1.23.5docker: 20.10.14CentOS7.5关于Ingress官网地址:https://kubernet
前言
最新有新的需求,原来的K8S版本(v1.18.1)已经不能满足需求了。因此部署了新的K8S版本—v1.23.5。前期基础部署,dashboard部署,metrics-server部署都可以,但是当部署到Ingress时,发现和原来的不一样了,因此记录一下。
标题
环境说明
K8S:v1.23.5
Docker: 20.10.14
CentOS7.5
关于Ingress
官网地址:https://kubernetes.github.io/ingress-nginx/
1、Ingress是整个Kubernetes的流量如何,他和Service不一样的是,Service的iptables/ipvs是4层调度,而Ingress可以转发7层的数据,实现http/https通信。因此使用Ingress通信更加安全。
2、在访问Pod时Service可以达到负载均衡,但是会有中众多的请求会先访问的Node-IP:Node-Port,这时就需要给节点做负载均衡,就需要负载均衡器,而Ingress就能达到这样的效果。
3、Ingress的实现原理:
实现Ingress的步骤
1、拉取yaml文件,生成个ingress-nginx-controller的Pod(实际上这个Pod就是Nginx做的),生成个ingress-nginx-controller的svc(用于接收外部流量给Ingress)
2、创建Ingress资源,(因为Ingress在K8S中是个资源对象,因此可以通过写资源清单的方式来创建)
3、创建后端service,Pod测试对象,来检验Ingress的效果
Ingress的安装
官方网址: https://kubernetes.github.io/ingress-nginx/deploy/
说明:在k8sv1.22版本以后,Ingress有个字段不再使用,因此我们需要使用新的YAML文件和新的镜像,这也就是和原来的版本的差异。
1、拉取YAML文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml
2、由于墙的原因,我将YAML文件放在网盘里面,需要自取
链接: https://pan.baidu.com/s/1c781sisldQF1xEd9NBmVog?pwd=nvdz 提取码: nvdz
3、需要注意有几个镜像,需要自己在阿里云上拉取
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
然后编辑deploy.yaml文件找到"image"字段,进行修改
4、apply文件
kubectl apply -f deploy.yaml
5、查看Pod
[root@master ~]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-ft5f4 0/1 Completed 0 63m
ingress-nginx-admission-patch-pb8hn 0/1 Completed 1 63m
ingress-nginx-controller-64b844d68-f8mpm 1/1 Running 0 63m
发现namespace为ingress-nginx的三个pod已经成功完成,status为completed的两个pod为job类型资源,completed表示job已经成功执行无需管它。
6、编辑Ingress的svc,改为NodePort
kubectl edit svc ingress-nginx-controller -n ingress-nginx
#将type:LoadBalancer --------> 改为type:NodePort
7、访问Ingress
kubectl get svc -n ingress-nginx
ingress-nginx-controller NodePort 10.96.236.64 <none> 80:32594/TCP,443:30778/TCP 64m
#80端口后面代表的是http访问,443端口代表是https访问,实际访问:宿主机的IP:32594,或者https://IP:30778
本机效果:
Ingress的域名访问
apiVersion: networking.k8s.io/v1
kind: Ingress #写个资源,资源对象是Ingress,就由此Ingress资源对象定义的规则,来配置Ingress转发情况
metadata:
name: ingress-host-bar #名称随便写
spec:
ingressClassName: nginx #默认就写Nginx
rules:
- host: "bo.ff.com" #服务的域名
http:
paths:
- pathType: Prefix #表示以前缀的方式进行匹配
path: "/" #前缀必须有个"/",才可以成功匹配
backend:
service: #规定Ingress后端的Service
name: hello-bo #后端Service的名称
port:
number: 8000 #后端Service监听的端口
- host: "demo.bo.com" #再写一个服务
http:
paths:
- pathType: Prefix #表示以前缀的方式进行匹配
path: "/nginx" # 这里前缀必须指明是"/nginx",之后会把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404
backend:
service: #同样规定后端的Service
name: nginx-bo
port:
number: 8000
Ingress路径重写
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2 #这里加个注解,表示路径重写,重写$2的
name: ingress-host-bar
spec:
ingressClassName: nginx
rules:
- host: "hello.atguigu.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-server
port:
number: 8000
- host: "demo.atguigu.com"
http:
paths:
- pathType: Prefix
path: "/nginx(/|$)(.*)"
backend:
service:
name: nginx-demo
port:
number: 8000
更多推荐
所有评论(0)