Kubernetes之ingress设置账号密码

Kubernetes中,应用服务使用ingress暴露后,默认是没有账号密码限制的,只要知道ingress的地址,所有人都可以访问服务(除非应用中有账号密码限制)。

那么有些开源服务访问时默认没有账号密码的,如kibana,elasticsearch-head 或者自己公司业务无账号密码,那么可以在k8s中给ingress设置账号密码来限制访问

设置步骤如下:

一、生成auth文件

使用htpasswd命令生产auth文件,其中mayi处改为你自己的账号,按提示输入密码

[root@mayi ~]# yum -y install httpd
#生成auth文件,password处输入密码
[root@mayi ~]# htpasswd -c auth mayi
New password: 
New password:
Re-type new password:
Adding password for user mayi
[root@mayi ~]# cat auth
mayi:$apr1$POsaodhx$zK16ME9yNZqSUc9Tpe83o0

二、生成secret

basic-auth是secret名称,要指定namespace,因为secret是不能跨namespace访问的

#记得指定namespace
[root@mayi ~]#  kubectl create secret generic basic-auth --from-file=auth -n default
secret "basic-auth" created

查看生成的secret

#查看basic-auth这个secret
[root@mayi ~]#  kubectl get secret basic-auth -o yaml -n default
apiVersion: v1
data:
  auth: ZHlqdzokYXByMSRUSVdYUjZtLyR6bUhpY2hzSlpDbTZ5bWd2QVVqLnoxCg==
kind: Secret
metadata:
  creationTimestamp: "2021-08-23T12:47:46Z"
  name: basic-auth
  namespace: default
  resourceVersion: "53830511"
  selfLink: /api/v1/namespaces/default/secrets/basic-auth
  uid: b2896f05-5008-4a2f-92c5-2c50d520ad30
type: Opaque

怎么在ingress中使用这个secret呢,在annotations中使用我们创建好的secret

三、创建ingress

[root@mayi ~]# ingress.yaml
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:     
  name: elasticsearch-head   
  namespace: default     
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - dyjw'
spec:     
  rules:
  - host: kibana.mayi.com
    http:
      paths:       
      - path:       
        backend:    
          serviceName: kibana
          servicePort: 5601

配置域名,解析到k8snode主机。

四、访问

使用:http://kibana.mayi.com/域名访问应用,现在就会提示账号密码登录。



参考地址:https://my.oschina.net/u/2518341/blog/4277962

举报
评论 0