Kubernetes Ingress を oath2-proxy で動作するように変更する方法

Kubernetes Ingress を oath2-proxy で動作するように変更する方法

フォローしていますこのチュートリアルIngress経由でKubernetesダッシュボードを公開し、Basic認証を使用してIngressを保護するには、oauth2 プロキシGitHub を ID プロバイダーとして使用します。

基本的に、私の Kubernetes ダッシュボード (ホストkubernetes.vismark.home) にアクセスするためのすべてのリクエストは GitHub ログイン画面にリダイレクトされ、ユーザーは有効な GitHub 認証情報を入力し、成功すると私の Kubernetes ダッシュボードにリダイレクトされます。

oauth2-proxy.yaml以下に示すように、oauth2 プロキシ用のシンプルなデプロイメント、サービス、Ingress を作成するファイルがあり、GitHub アプリケーション構成を指定します。

// oauth2-proxy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: oauth2-proxy
  name: oauth2-proxy
  namespace: kubernetes-dashboard
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: oauth2-proxy
  template:
    metadata:
      labels:
        k8s-app: oauth2-proxy
    spec:
      containers:
      - args:
        - --provider=github
        - --email-domain=*
        - --upstream=file:///dev/null
        - --http-address=0.0.0.0:4180
        env:
        - name: OAUTH2_PROXY_CLIENT_ID
          value: 3d00820d20ac2d5494f3 # Our client ID
        - name: OAUTH2_PROXY_CLIENT_SECRET
          value: XXXXXXXX
        - name: OAUTH2_PROXY_COOKIE_SECRET
          value: XXXXXXXX
        image: quay.io/oauth2-proxy/oauth2-proxy:latest
        imagePullPolicy: Always
        name: oauth2-proxy
        ports:
        - containerPort: 4180
          protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: oauth2-proxy
  name: oauth2-proxy
  namespace: kubernetes-dashboard
spec:
  ports:
  - name: http
    port: 4180
    protocol: TCP
    targetPort: 4180
  selector:
    k8s-app: oauth2-proxy

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: oauth2-proxy
  namespace: kubernetes-dashboard
spec:
  ingressClassName: nginx
  rules:
  - host: kubernetes.vismark.home
    http:
      paths:
      - path: /oauth2
        pathType: Prefix
        backend:
          service:
            name: oauth2-proxy
            port:
              number: 4180

oauth2 プロキシのデプロイメント、サービス、および Ingress は期待どおりに動作します。オブジェクトを作成した後、アクセスできるようになりhttp://kubernetees.vismark.home/oauth2、サインインするように求められます。

私の問題は、Kubernetes ダッシュボードを公開する Ingress yaml にありますkubernetes-ingress.yaml

// kubernetes-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubernetes-ingress
  annotations:
    nginx.ingress.kubernetes.io/auth-url: "https://oauth2-proxy.kubernetes-dashboard.svc.cluster.local/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://oauth2-proxy.kubernetes-dashboard.svc.cluster.local/oauth2/start?rd=$escaped_request_uri"
spec:
  rules:
  - host: kubernetes.vismark.home
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 80

には、ユーザーに認証を求めるためにサービスを使用する必要があるkubernetes-ingress.yamlことを指定する 2 つの注釈があります。oauth2-proxy

しかし、ホスト「http://kubernetes.vismark.home」にアクセスしようとすると、503 エラーが発生します。

2 つの oauth2-proxy アノテーションを削除すると、ファイルkubernetes-ingress.yamlはダッシュボードを正常に公開しますが、2 つのアノテーションを再度追加するとすぐに 503 が発生します。

このファイルで何かを誤って設定したのではないかと思いますがkubernetes-proxy.yaml、それが何なのかはわかりません。

以下は、追加のコンテキストとして、私の GitHub アプリケーション構成のスクリーンショットです。

  • ホームページURL:https://kubernetes.vismark.home
  • 認証コールバック URL:https://kubernetes.vismark.home/oauth2/callback

関連情報