web-dev-qa-db-ja.com

Traefikを使用したKubernetesの基本認証

TraefikをIngressコントローラーとして使用して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 Webページをチェックできますが、基本認証がない場合に表示されます。

これは私の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
6
Asier Gomez

基本認証を使用するのが一般的です。 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: "mysecret"

したがって、基本認証の完全な構成例は次のようになります。

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モニタリング

これは問題なく機能するはずです。

24
d0bry