首页 > 解决方案 > 使用 Traefik 进行 Kubernetes 基本身份验证

问题描述

我正在尝试在使用 Traefik 作为入口控制器的 Nginx 示例上配置基本身份验证。

我只是"mypasswd"在 Kubernetes 机密上创建机密。

这是我正在使用的入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginxingress
  annotations:
    ingress.kubernetes.io/auth-type: basic
    ingress.kubernetes.io/auth-realm: traefik
    ingress.kubernetes.io/auth-secret: mypasswd
spec:
  rules:
  - host: nginx.mycompany.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginxservice
          servicePort: 80

我检查了 Traefik 仪表板,它出现了,如果我访问 nginx.mycompany.com,我可以检查 Nginx 网页,但没有基本身份验证。

这是我的 nginx 部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Nginx 服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: nginxservice
  name: nginxservice
spec:
  ports:
    # The port that this service should serve on.
    - port: 80
  # Label keys and values that must match in order to receive traffic for this service.
  selector:
    app: nginx
  type: ClusterIP

标签: kubernetestraefikkubernetes-ingress

解决方案


使用基本身份验证很流行。参考Kubernetes 文档,您应该能够使用以下步骤保护对 Traefik 的访问:

  1. htpasswd使用工具创建认证文件。系统将要求您输入用户密码:

htpasswd -c ./auth

  1. 现在使用 kubectl 创建的文件在监控命名空间中创建一个秘密 htpasswd

kubectl create secret generic mysecret --from-file auth --namespace=monitoring

  1. 通过将注释附加到 Ingress 对象来启用基本身份验证:

ingress.kubernetes.io/auth-type:“基本”

ingress.kubernetes.io/auth-secret:“我的秘密”

因此,基本身份验证的完整示例配置如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: prometheus-dashboard
  namespace: monitoring
  annotations:
    kubernetes.io/ingress.class: traefik
    ingress.kubernetes.io/auth-type: "basic"
    ingress.kubernetes.io/auth-secret: "mysecret"
spec:
  rules:
  - host: dashboard.prometheus.example.com
    http:
      paths:
      - backend:
          serviceName: prometheus
          servicePort: 9090
  1. 您可以应用以下示例:

kubectl create -f prometheus-ingress.yaml -n 监控

这应该没有任何问题。


推荐阅读