K8s---Ingress服务
目录ingress简介ingress地址重写加密认证ingress简介单独用service暴露服务的方式,在实际生产环境中不太合适ClusterIP的方式只能在集群内部访问。NodePort方式的话,测试环境使用还行,当有几十上百的服务在集群中运行时,NodePort的端口管理是灾难。LoadBalance方式受限于云平台,且通常在云平台部署ELB还需要额外的费用。ingress可以简单理解为se
目录
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。
部署ingress服务
cd ..
mkdir ingress
cd ingress/
ls
【需要deploy-v1.1.0.yaml文件,】
vim deploy-v1.1.0.yaml
修改并查看镜像,拉取上传至私有仓库
网页:新建项目:ingress-nginx
server1:
docker load -i ingress-nginx-v1.1.0.tar
docker push reg.westos.org/ingress-nginx/kube-webhook-certgen:v1.1.1
docker push reg.westos.org/ingress-nginx/controller:v1.1.0
server2:
kubectl apply -f deploy-v1.1.0.yaml
kubectl get ns
kubectl -n ingress-nginx get all
有一个pod
kubectl -n ingress-nginx get pod
kubectl -n ingress-nginx get svc
kubectl -n ingress-nginx describe svc ingress-nginx-controller
有一个Endpoints
kubectl -n ingress-nginx edit svc ingress-nginx-controller
编辑【type: LoadBalancer】
kubectl -n ingress-nginx get svc
可以看到刚改的类型已经生效了
真机中:
curl 172.25.70.100
因为没有定义资源所以是404
server2:
kubectl -n ingress-nginx get pod
刚真机中其实就是访问到这个pod
kubectl -n ingress-nginx logs ingress-nginx-controller-77f65b6696-vr78f
查看pod日志
ingress地址重写
vim ingress.yml
ls
kubectl get svc
kubectl -n ingress-nginx get ingressclasses
kubectl get svc
cd ..
ls
vim svc.yml
kubectl apply -f svc.yml #创建svc
kubectl get svc
curl 10.111.110.66
访问刚创建的svc地址可以实现负载均衡
cd ingress/
ls
vim ingress.yml
kubectl get pod
是我们要访问的后端资源,现在创建的ingress要跟这个创建在同一namespeces地下
kubectl apply -f ingress.yml
kubectl get ingress
#class要是空的就不生效【访问逻辑其实是nginx的反向代理】
真机中:
vim /etc/hosts 添加解析
172.25.70.100 mfsmaster www1.westos.org www2.westos.org
ping www1.westos.org
外部能访问【访问域名会解析到70.100】
server2:
kubectl -n ingress-nginx get svc
#70.100是控制器的svc
kubectl -n ingress-nginx get pod
kubectl get ingress
kubectl get svc
kubectl describe svc web1
kubectl get ingress
kubectl describe ingress ingress-myservicea
cd
cd pod/
ls
vim deploy.yml 【标签改为nginx】
cp deploy.yml ../service/ingress/deployment.yml
cd
cd service/
ls
cd ingress/
vim deployment.yml 【定义web2】
kubectl apply -f deployment.yml
kubectl get pod
kubectl get ingress
kubectl describe ingress ingress-myservicea
可以看到有两个虚拟主机
真机中:
ping www2.westos.org
也解析到了70.100
curl www2.westos.org
curl www1.westos.org
加密
server2:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
ll
kubectl create secret tls tls-secret --key tls.key --cert tls.crt
创建secret
kubectl get secrets
vim ingress.yml
kubectl apply -f ingress.yml
kubectl describe ingress ingress-myservicea
网页:访问www1.westos.org
强制重定向到443
认证
yum install -y httpd-utils
htpasswd -c auth dmq
创建auth文件用户名为dmq
cat auth
可以看到生成的文件
kubectl create secret generic basic-auth --from-file=auth
给文件创建密码
kubectl get secrets
vim ingress.yml
kubectl apply -f ingress.yml
kubectl describe ingress ingress-myservicea
网页:可以看到访问域名需要输入用户名和密码,访问域名也可以帮我们重定向到hostname.html这个页面
真机中:
curl -I www1.westos.org#302重定向
更多推荐
所有评论(0)