摘要:nginx可以做访问控制,在访问控制列表里面有一种是基于IP,一种是基于用户。ingress的接口是基于nginx的,可以实现基于用户的访问控制。nginx拥有的特性,ingress中可以继续使用。
nginx可以做访问控制,在访问控制列表里面有一种是基于IP,一种是基于用户。ingress的接口是基于nginx的,可以实现基于用户的访问控制。nginx拥有的特性,ingress中可以继续使用。
http认证文件创建:
1.yum install httpd-tools -y
2.htpasswd -c auth 87long(设置认证用户是87long)
3.kubectl create secret generic ingress-basic-auth --from-file=auth -n ingress-nginx
下面创建ingress的资源清单对象yaml文件:
touch ingress.yaml
vim ingress.yaml:
apiVersion: v1
kind: Deployment
metadata:
spec:
replicas: 2
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: c1
image: nginx
imagePullPolicy: Always
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: ingress-httpproxy-auth
namespace: ingress-nginx
labels:
app: auth
spec:
ports:
- port: 80
targetPort: 80
selector:
app: auth
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-with-auth
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: ingress-basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentications Required - 87long'
spec:
ingressClassName: nginx
rules:
paths:
- pathType: ImplementationSpecific
path: "/"
backend:
service:
name: ingress-httpproxy-auth
number: 80
kubectl create -f ingress.yaml
需要httpd-tools工具去提供一个htpasswd文件,去生成一个认证文件,认证文件名是auth,用户名是87long。
然后创建一个generic类型的secret文件,把auth认证文件封装在secret对象里面,等待着后续去调用。
然后创建ingress资源对象,开启基础认证,并且指定认证的数据文件,基于secret提供。
ingress中的pathtype是定义路径匹配规则的关键字段,用于确定请求路径的匹配方式。在kubernetes中,pathtype有三种类型。
1.Exact精确匹配
仅仅匹配符合路径定义的请求,比如路径定义是/api,那么仅仅处理以/api开头的请求。
2.Prefix前缀匹配
匹配路径前缀,如果路径是/api,则可以处理/api/v1、/api/v2等请求。
3.ImplementationSpecific
匹配的规则由具体的ingress控制器实现,例如nginx、traefik等控制器,需要结合控制器特性。
如果没有指定pathtype,ingress创建会失败。
匹配优先级是:精确匹配Exact高于前缀匹配Prefix,高于控制器特定规则ImplementationSpecific。
ImplementationSpecific代表基于nginx控制器自身规则去处理。
新版的浏览器不会输出提示信息auth-realm的内容。
湖边
鼓励的话语:只有走过最深的谷底,才能见证自己的强大力量!
来源:小胡科技每日一讲