一。ingress的介绍
对于NodePort和LoadBalance,这两种方法,都有缺点:
1.NodePort方式缺点会占用很多集群的端口,当集群服务变多的时候,缺点更加显著
2.LB的缺点就是每一个service都需要一个LB,浪费,麻烦,并且需要K8S之外的设备
基于上面两种情况,K8S提供了ingress资源对象,ingress只需要一个nodeport或者一个LB就可以满足暴露多个service需求,实际上,ingress相当于一个7层负载均衡器,是K8S对反向代理的一个抽象,他的工作原理类似于nginx,可以理解为在ingress里建立多个映射规则,ingress controller通过监听这些配置规则并且转化为nginx反向代理,然后对外提供服务,在这李有两个给核心概念:
1.ingress:K8S的一个对象,作用是定义请求如何转发到service的规则
2.ingress controller:具体实现反向代理负载均衡的程序,对ingress定义规则进行解析,根据配置的规则来实现请求转发,事项方式很多:nginx,haproxy等
二。Ingress的工作原理:
1.用户编写ingress规则,说明哪一个域对应K8S集群的哪一个服务
2.ingress控制器动态感知ingress服务规则的变化,然后生成一段相应的nginx反向代理配置
3.ingress控制器会将生成的nginx配置写入到一个运行着nginx的服务中,并动态更新
4.到此为止,其实真正的工作就是nginx了,内部配置了用户定义的请求转发规则
三。环境的准备:
1.下载配置文件:wget -c https://gitee.com/kong-xiangyuxcz/svn/releases/download/ingress-nginx-controller-v1.13.1/deploy.yaml
445 image: ingress-nginx/controller:v1.11.2
546 image: ingress-nginx/kube-webhook-certgen:v1.4.3
599 image: ingress-nginx/kube-webhook-certgen:v1.4.3
kubectl apply -f deploy.yaml:启用yaml
kubectl get -f deploy.yaml:删除yaml
四。ingress的用法:
准备工作:
kubectl create deployment myappv1 –image nginx:1.17.1 –dry-run=client -o yaml > myappv1.yaml:创建一个控制器
kubectl create service clusterip myappv1 –tcp 80:80 –dry-run=client -o yaml >> myappv1.yaml:创建servie服务
–dry-run=client模拟执行命令(客户端 dry run),不会实际创建服务,仅生成配置
cp myappv1.yaml myappv2.yaml:创建两个yaml
运行结果:
使用ingress进行负载均衡:
1. kubectl -n ingress-nginx get ingressclasses.networking.k8s.io:查看自己所在的类
2.kubectl create ingress ingress-test –class nginx –rule="/=myappv1:80" –dry-run=client -o yaml > ingress-test.yml:生成ingress文件
3.进行检测:
4.测试:
五。ingress基于路径的访问:
1.首先删除以前的ingress,避免冲突:
2.创建基于路径的ingress文件:
3.检测结果:
六。基于域名的访问:
测试:
七。建立tls加密
1.建立私钥和证书:openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 365 -subj "/CN=nginxsvc/0=nginxsvc" -out tls.crt
2.建立资源存储,假如集群:kubectl create secret tls web-tls-secret –key tls.key –cert tls.crt
3.查看secret内容: kubectl get secrets web-tls-secret -o yaml
4.查看类型:
5.进行配置:
6.测试:
七。建立auth认证:
1.下载软件:
dnf install httpd-tools
2.建立加密用户
htpasswd -cm auth admin
3.提取到集群空间,generic存储任意键值对形式的敏感数据
kubectl create secret generic auth-web –from-file auth
4.查看加密详细内容:
kubectl get secrets auth-web -o yaml
5.编写yml文件:
6.测试:
八:rewirte重定向:
评论前必须登录!
注册