k8sIngress(部署,域名访问,加密,认证,地址重写)
Posted S4061222
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8sIngress(部署,域名访问,加密,认证,地址重写)相关的知识,希望对你有一定的参考价值。
目录
一、 Ingress
简介
-
一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。
-
Ingress由两部分组成:
Ingress controller和Ingress服务
。 -
Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。
官网
:https://kubernetes.github.io/ingress-nginx/
Ingress是一个API对象,和其他对象一样,通过yaml文件来配置。ingress通过http或https暴露集群内部service,给service提供外部URL、负载均衡、SSL/TLS能力以及基于host的方向代理。ingress服务的使用必须在策略网络中才能实现,如calico网络
ingress相当于一个7层的负载均衡器
,是k8s对反向代理的一个抽象。大概的工作原理也确实类似于Nginx,可以理解成在Ingress 里建立一个个映射规则 , ingress Controller 通过监听 Ingress这个api对象里的配置规则并转化成Nginx 的配置(kubernetes声明式API和控制循环) , 然后对外部提供服务。
ingress包括:ingress controller和ingress resources
ingress controller:
核心是一个deployment
,实现方式有很多,比如nginx, Contour, Haproxy, trafik, Istio,需要编写的yaml有:Deployment, Service, ConfigMap,
ServiceAccount(Auth),其中service的类型可以是NodePort或者LoadBalancer。ingress resources:这个就是一个类型为Ingress的k8s api对象了,这部分则是面向开发人员
1.ingress部署
ingress是7曾的负载均衡,可以重定向,clinet-ingress-svc-pod,减少vip的分布,域名调度到svc的后端
上传ingress两个镜像到私有仓库下的ingress-nginx项目
查看镜像上传成功
下载所需要的deploy.yaml文件,修改deploy.yaml文件中镜像地址
执行deploy.yaml清单
查看ns为ingress-nginx的所有信息,可以看到ingress-nginx-controller已经running
查看ns为ingress-nginx的pod的信息
查看日志
查看svc暴露端口:32470
测试:
访问server2ip地址加上端口
2.域名访问+ingress-nginx
删除其他的svc
编辑myapp.yaml,添加svc服务
查看ns为ingress-nginx的svc
查看之前的3个pod
查看myapp-svc的详细信息,
编辑ingress.yaml文件
运行,查看svc,会产生myapp-svc
查看ingress反向代理信息,看到www1.westos.org域名,由mysvc服务暴露的三个后端
修改svc配置文件为LoadBalancer
查看ingress-nginx的IP地址
访问
设置本地解析
域名访问测试,访问到对应service,且负载均衡
3.域名访问+ingress-nginx(2个域名)
两个域名,两个服务,访问同一个IP,暴露不同的后端
www1.westos.org ---- myapp-svc(svc) ---- myapp(label) ---- ingress-myapp(ingress)
www2.westos.org ---- nginx-svc ---- nginx ---- ingress-nginx
修改deloyment文件中的标签和镜像版本,为重定向作准备,给定不同版本的镜像,方便看到反向代理的结果差异。可以自行修改版本为v2
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: myapp:v1
查看pod
查看pod的标签
修改svc.yaml文件,有两个服务:myapp-svc和nginx-svc
查看myapp-svc服务的详细信息,myapp-svc下有三个pod 的ip用于均衡访问
查看nginx-svc服务的详细信息,nginx-svc下有三个pod 的ip用于均衡访问
删除第一次实验的ingress-demo
修改ingress.yaml文件,ingress有两个:ingress-myapp和ingress-nginx
应用ingress.yaml后,成功看到两个不同的ingress对应不同的域名
发现ingress-nginx的svc暴露出来的外部ip与ingress-myapp的svc的ip相同
,即两个域名对应同一个ip
本地解析
域名访问测试,访问到对应service,负载均衡测试,成功 nginx-svc
进入启动成功的ingress-nginx-controller
,可以看到www1.westos.org和www1.westos.org
都已写入配置文件
4.加密
实验环境
:
之前实验的pod:
之前实验的svc:
删除之前实验的ingress
创建ingress-myapp的ingress
Ingress TLS 配置
生成证书crt和key
修改ingress文件
执行ingress清单,查看详细信息
测试:
此处已经解析完成
308:重定向
curl www1.westos.org -I 查看重定向地址
curl -k 加密域名访问重定向的地址,curl不支持重定向
网页访问,轮询
5.认证+加密
认证需要系统自带的认证功能,需要安装生成认证证书的插件
生成证书,输入认证密码
创建证书到k8s secret
修改ingress文件,导入证书
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - jiaojiao'
spec:
tls:
- hosts:
- www1.westos.org
secretName: tls-secret
rules:
- host: www1.westos.org
http:
paths:
- path: /
backend:
serviceName: nginx-svc
servicePort: 80
执行ingress清单
查看证书信息是否已添加
访问测试:
6.地址重写
2.1 根目录重定向到hostname.html
修改ingress文件,根目录重定向到hostname.htm
测试:
访问域名www1.westos.org直接跳转到指定目录的下
2.2 地址更新
如更新了地址,从www1.westos.org/westos/变为www1.westos.org
修改ingress文件
nginx.ingress.kubernetes.io/rewrite-target: /$2 %抓取第二列输入内容
- path: /westos(/|$)(.*) %自动抓取westos后的内容,即忽略westos
应用ingress后,查看详细信息
测试:
访问 www1.westos.org/westos/自动跳转到www1.westos.org;
访问www1.westos.org/westos/hostname.html自动跳转到www1.westos.org/hostname.html,忽略westos
2.3 根目录重定向到westos,并添加地址重写
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
nginx.ingress.kubernetes.io/app-root: /westos
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - jiaojiao'
spec:
tls:
- hosts:
- www1.westos.org
secretName: tls-secret
rules:
- host: www1.westos.org
http:
paths:
- path: /westos(/|$)(.*)
backend:
serviceName: nginx-svc
servicePort: 80
测试:
逐级代理测试, 域名代理到/westos
-k访问443加密端口,显示需要认证;-u 后跟认证用户和密码即可查看
以上是关于k8sIngress(部署,域名访问,加密,认证,地址重写)的主要内容,如果未能解决你的问题,请参考以下文章