目录

ingress简介

ingress地址重写

加密

认证


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重定向

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐