839の日記

業務とは関係ない趣味の話を書くブログです。

k8sのingressでクライアント認証を行う

クライアント証明書をiPhoneに入れる - 839の日記 の続きです。
k8s側にセットするのも書いておきます。

とは言ってもingressにクライアント証明書をセットするのは非常に簡単です。
まず先の記事で作成したkey/certを使ってk8sのsecretを作成します。

kubectl create secret tls hoge-secret --key client.key --cert client-ca.crt

作成したsecretをもとにingressを設定します。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hoge-ing
  annotations:
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/auth-tls-secret: hoge-secret
spec:
  rules:
  - host: hoge.com
    http:
      paths:
      - backend:
          serviceName: hoge-svc
          servicePort: 80

上記の設定で指定したホストにアクセスしたときにクライアント認証が走ります。
OAuth認証Basic認証などの代替手段もありますが、クライアント認証が一番手軽でセキュアにできるので個人的によく使っています。