參考: https://www.cnblogs.com/wayneiscoming/p/7715623.html , https://jimmysong.io/kubernetes-handbook/guide/rbac.md ,
https://feisky.gitbooks.io/kubernetes/zh/plugins/authentication.html , https://jimmysong.io/kubernetes-handbook/guide/rbac.html ,https://jimmysong.io/posts/user-authentication-in-kubernetes/#%E9%9D%99%E6%80%81%E5%AF%86%E7%A0%81%E6%96%87%E4%BB%B6 , https://mritd.me/2018/01/07/kubernetes-tls-bootstrapping-note/
配置kubernetes服務basic auth
由於一些內部服務訪問並不需要鑒權,如kubernetes-dashboard、traefik-ui,所以當我們想通過外網域名訪問的時候會有安全問題。這里我們可以為服務配置basic auth,訪問時需要驗證,以下是配置過程:
1. 創建用戶密碼文件
這里我們使用htpasswd創建加密過的密碼文件。
# htpasswd -bc basic-auth-secret username password
2. 創建Kubernetes Secret
# kubectl create secret generic basic-auth --from-file=basic-auth-secret --namespace=kube-system
3. 部署服務Ingress使其使用basic auth
通過在Ingress中添加鑒權annotation實現服務basic auth。這里需要注意:
- Secret文件必須與Ingress規則在同一命名空間。
- 目前只支持basic authentication。
- Realm不可配置,默認使用traefik。
- Secret必須只包含一個文件。
apiVersion: v1 kind: Service metadata: name: traefik-web-ui namespace: kube-system spec: selector: k8s-app: traefik-ingress-lb ports: - port: 80 targetPort: 8080 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: traefik-web-ui namespace: kube-system annotations:
kubernetes.io/ingress.class: traefik ingress.kubernetes.io/auth-type: basic ingress.kubernetes.io/auth-secret: basic-auth spec: rules: - host: traefik-ui.domain.com http: paths: - backend: serviceName: traefik-web-ui servicePort: 80