GitHub OAuth, Dex เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Kubernetes-เตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เตเด•

Dex, dex-k8s-authenticator, GitHub เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เด†เด•เตเดธเดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดŸเตเดฏเต‚เดŸเตเดŸเต‹เดฑเดฟเดฏเตฝ เดžเดพเตป เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเดฟเตฝเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต.

GitHub OAuth, Dex เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Kubernetes-เตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เตเด•
เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเดฟเดฒเตเดณเตเดณ เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เดšเดพเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เดฎเต†เดฎเตเดฎเต† เด•เดจเตเดตเดฟเดธเดจเตเดฆเต‡เดถเด‚

เด†เดฎเตเด–เด‚

เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเตเด‚ เด•เตเดฏเตเดŽ เดŸเต€เดฎเดฟเดจเตเด‚ เดšเดฒเดจเดพเดคเตเดฎเด•เดฎเดพเดฏ เด…เดจเตเดคเดฐเต€เด•เตเดทเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ เดกเดพเดทเตโ€Œเดฌเต‹เตผเดกเดฟเดจเตเด‚ kubectl-เดจเตเด‚ เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดตเตผเด•เตเด•เต เด†เด•เตโ€Œเดธเดธเต เดจเตฝเด•เดพเตป เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. OpenShift เดชเต‹เดฒเต†เดฏเดฒเตเดฒ, vanilla Kubernetes-เดจเต เดจเต‡เดฑเตเดฑเต€เดตเต เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฃเด‚ เด‡เดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเดพเดฏเดฟ เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟ เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เดˆ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต:

  • dex-k8s-authenticatorโ€Š - kubectl config เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเต†เดฌเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป
  • เดกเต†เด•เตเดธเต โ€” OpenID เด•เดฃเด•เตเดŸเต เดชเตเดฐเตŠเดตเตˆเดกเตผ
  • GitHub - เดžเด™เตเด™เดณเตเดŸเต† เด•เดฎเตเดชเดจเดฟเดฏเดฟเตฝ GitHub เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ

เดžเด™เตเด™เตพ Google OIDC เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเดšเตเดšเต, เดชเด•เตเดทเต‡ เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ เดžเด™เตเด™เตพ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเดŸเต เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเตป, เด…เดคเดฟเดจเดพเตฝ GitHub-เดฎเดพเดฏเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เดจเดจเตเดจเดพเดฏเดฟ เดฏเต‹เดœเดฟเดšเตเดšเต. เด—เตเดฐเต‚เดชเตเดชเต เดฎเดพเดชเตเดชเดฟเด‚เด—เต เด•เต‚เดŸเดพเดคเต†, เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ RBAC เดจเดฏเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดตเดฟเดทเตเดตเตฝ เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเดคเตเดคเดฟเตฝ เดžเด™เตเด™เดณเตเดŸเต† Kubernetes เด…เด‚เด—เต€เด•เดพเดฐ เดชเตเดฐเด•เตเดฐเดฟเดฏ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต:

GitHub OAuth, Dex เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Kubernetes-เตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เตเด•
เด…เด‚เด—เต€เด•เดพเดฐ เดชเตเดฐเด•เตเดฐเดฟเดฏ

เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เดณเตเด‚ เดชเต‹เดฏเดฟเตปเตเดฑเต เดฌเตˆ เดชเต‹เดฏเดฟเตปเตเดฑเตเด‚:

  1. เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต dex-k8s-authenticator-เดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต (login.k8s.example.com)
  2. dex-k8s-authicator เด…เดญเตเดฏเตผเดคเตเดฅเดจ Dex-เดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต (dex.k8s.example.com)
  3. เดกเต†เด•เตเดธเต GitHub เดฒเต‹เด—เดฟเตป เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต
  4. GitHub เด†เดตเดถเตเดฏเดฎเดพเดฏ เด…เด‚เด—เต€เด•เดพเดฐ เดตเดฟเดตเดฐเด™เตเด™เตพ เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ Dex-เดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
  5. Dex เดฒเดญเดฟเดšเตเดš เดตเดฟเดตเดฐเด™เตเด™เตพ dex-k8s-authenticator-เดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต
  6. เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต GitHub-เตฝ เดจเดฟเดจเตเดจเต OIDC เดŸเต‹เด•เตเด•เตบ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต
  7. dex-k8s-authenticator kubeconfig-เดฒเต‡เด•เตเด•เต เดŸเต‹เด•เตเด•เตบ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต
  8. kubectl เดŸเต‹เด•เตเด•เตบ KubeAPIServer-เดจเต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต
  9. เดชเดพเดธเดพเด•เตเด•เดฟเดฏ เดŸเต‹เด•เตเด•เดฃเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ KubeAPIServer kubectl-เดฒเต‡เด•เตเด•เต เด†เด•เตโ€Œเดธเดธเตเดธเต เดจเตฝเด•เตเดจเตเดจเต
  10. เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต kubectl-เตฝ เดจเดฟเดจเตเดจเต เด†เด•เตเดธเดธเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต

เดคเดฏเตเดฏเดพเดฑเต†เดŸเตเดชเตเดชเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต (k8s.example.com), เด•เต‚เดŸเดพเดคเต† เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดค HELM เดธเดนเดฟเดคเด‚ เดตเดฐเตเดจเตเดจเต. เดžเด™เตเด™เตพเด•เตเด•เต GitHub-เดฒเตเด‚ (super-org) เด’เดฐเต เดธเตเดฅเดพเดชเดจเดฎเตเดฃเตเดŸเต.
เดจเดฟเด™เตเด™เตพเด•เตเด•เต HELM เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด• เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต.

เด†เดฆเตเดฏเด‚ เดจเดฎเตเดฎเตพ GitHub เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดธเตเดฅเดพเดชเดจ เด•เตเดฐเดฎเต€เด•เดฐเดฃ เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•, (https://github.com/organizations/super-org/settings/applications) เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดชเตเดคเดฟเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• (เด…เด‚เด—เต€เด•เตƒเดค OAuth เด†เดชเตเดชเต):
GitHub OAuth, Dex เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Kubernetes-เตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เตเด•
GitHub-เตฝ เด’เดฐเต เดชเตเดคเดฟเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

เด†เดตเดถเตเดฏเดฎเดพเดฏ URL-เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดซเต€เตฝเดกเตเด•เตพ เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด•, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:

  • เดนเต‹เด‚เดชเต‡เดœเต URL: https://dex.k8s.example.com
  • เด…เด‚เด—เต€เด•เตƒเดค เด•เต‹เตพเดฌเดพเด•เตเด•เต URL: https://dex.k8s.example.com/callback

เดฒเดฟเด™เตเด•เตเด•เดณเดฟเตฝ เดถเตเดฐเดฆเตเดงเดพเดฒเตเดตเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด•, เดธเตเดฒเดพเดทเตเด•เตพ เดจเดทเตเดŸเดชเตเดชเต†เดŸเดพเดคเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต.

เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏ เดซเต‹เดฎเดฟเดจเต เดฎเดฑเตเดชเดŸเดฟเดฏเดพเดฏเดฟ, GitHub เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚ Client ID ะธ Client secret, เด…เดต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เดธเตเดฅเดฒเดคเตเดคเต เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเด•, เด…เดต เดžเด™เตเด™เตพเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเด•เตเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดตเต‹เตพเดŸเตเดŸเต เดฐเดนเดธเตเดฏเด™เตเด™เตพ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต):

Client ID: 1ab2c3d4e5f6g7h8
Client secret: 98z76y54x32w1

เด‰เดชเดกเตŠเดฎเต†เดฏเตโ€Œเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ DNS เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเด• login.k8s.example.com ะธ dex.k8s.example.com, เดชเตเดฐเดตเต‡เดถเดจเดคเตเดคเดฟเดจเตเดณเตเดณ SSL เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เดณเตเด‚.

เดจเดฎเตเด•เตเด•เต SSL เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚:

cat <<EOF | kubectl create -f -
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: cert-auth-dex
  namespace: kube-system
spec:
  secretName: cert-auth-dex
  dnsNames:
    - dex.k8s.example.com
  acme:
    config:
    - http01:
        ingressClass: nginx
      domains:
      - dex.k8s.example.com
  issuerRef:
    name: le-clusterissuer
    kind: ClusterIssuer
---
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: cert-auth-login
  namespace: kube-system
spec:
  secretName: cert-auth-login
  dnsNames:
    - login.k8s.example.com
  acme:
    config:
    - http01:
        ingressClass: nginx
      domains:
      - login.k8s.example.com
  issuerRef:
    name: le-clusterissuer
    kind: ClusterIssuer
EOF
kubectl describe certificates cert-auth-dex -n kube-system
kubectl describe certificates cert-auth-login -n kube-system

เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเดณเตเดณ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด‡เดทเตเดฏเต‚เดตเตผ le-clusterissuer เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเดพเด•เดฃเด‚, เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, HELM เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•:

helm install --namespace kube-system -n cert-manager stable/cert-manager
cat << EOF | kubectl create -f -
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: le-clusterissuer
  namespace: kube-system
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: le-clusterissuer
    http01: {}
EOF

KubeAPISserver เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

kubeAPIServer เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ OIDC เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

kops edit cluster
...
  kubeAPIServer:
    anonymousAuth: false
    authorizationMode: RBAC
    oidcClientID: dex-k8s-authenticator
    oidcGroupsClaim: groups
    oidcIssuerURL: https://dex.k8s.example.com/
    oidcUsernameClaim: email
kops update cluster --yes
kops rolling-update cluster --yes

เดžเด™เตเด™เตพ เด‰เดชเดฏเต‡เดพเด—เดฟเด•เตเด•เตเดจเตเดจเต เด•เต‹เดชเตเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดธเดฎเดพเดจเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดฎเดฑเตเดฑเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดฎเดพเดจเต‡เดœเตผเดฎเดพเตผ.

Dex เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด‚ dex-k8s-authenticator

เดกเต†เด•เตโ€Œเดธเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด‚ เด•เต€เดฏเตเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เดจเดฎเตเด•เตเด•เต เด…เดคเต เด…เดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต เดŽเดŸเตเด•เตเด•เดพเด‚:

sudo cat /srv/kubernetes/ca.{crt,key}
-----BEGIN CERTIFICATE-----
AAAAAAAAAAABBBBBBBBBBCCCCCC
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
DDDDDDDDDDDEEEEEEEEEEFFFFFF
-----END RSA PRIVATE KEY-----

เดจเดฎเตเด•เตเด•เต dex-k8s-authenticator เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด•เตเดฒเต‹เตบ เดšเต†เดฏเตเดฏเดพเด‚:

git clone [email protected]:mintel/dex-k8s-authenticator.git
cd dex-k8s-authenticator/

เดฎเต‚เดฒเตเดฏ เดซเดฏเดฒเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดจเดฎเตเด•เตเด•เดพเดฏเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ HELM เดšเดพเตผเดŸเตเดŸเตเด•เตพ.

Dex-เดจเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเด‚:

cat << EOF > values-dex.yml
global:
  deployEnv: prod
tls:
  certificate: |-
    -----BEGIN CERTIFICATE-----
    AAAAAAAAAAABBBBBBBBBBCCCCCC
    -----END CERTIFICATE-----
  key: |-
    -----BEGIN RSA PRIVATE KEY-----
    DDDDDDDDDDDEEEEEEEEEEFFFFFF
    -----END RSA PRIVATE KEY-----
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
  path: /
  hosts:
    - dex.k8s.example.com
  tls:
    - secretName: cert-auth-dex
      hosts:
        - dex.k8s.example.com
serviceAccount:
  create: true
  name: dex-auth-sa
config: |
  issuer: https://dex.k8s.example.com/
  storage: # https://github.com/dexidp/dex/issues/798
    type: sqlite3
    config:
      file: /var/dex.db
  web:
    http: 0.0.0.0:5556
  frontend:
    theme: "coreos"
    issuer: "Example Co"
    issuerUrl: "https://example.com"
    logoUrl: https://example.com/images/logo-250x25.png
  expiry:
    signingKeys: "6h"
    idTokens: "24h"
  logger:
    level: debug
    format: json
  oauth2:
    responseTypes: ["code", "token", "id_token"]
    skipApprovalScreen: true
  connectors:
  - type: github
    id: github
    name: GitHub
    config:
      clientID: $GITHUB_CLIENT_ID
      clientSecret: $GITHUB_CLIENT_SECRET
      redirectURI: https://dex.k8s.example.com/callback
      orgs:
      - name: super-org
        teams:
        - team-red
  staticClients:
  - id: dex-k8s-authenticator
    name: dex-k8s-authenticator
    secret: generatedLongRandomPhrase
    redirectURIs:
      - https://login.k8s.example.com/callback/
envSecrets:
  GITHUB_CLIENT_ID: "1ab2c3d4e5f6g7h8"
  GITHUB_CLIENT_SECRET: "98z76y54x32w1"
EOF

เด’เดชเตเดชเด‚ dex-k8s-authenticator-เดจเดพเดฏเดฟ:

cat << EOF > values-auth.yml
global:
  deployEnv: prod
dexK8sAuthenticator:
  clusters:
  - name: k8s.example.com
    short_description: "k8s cluster"
    description: "Kubernetes cluster"
    issuer: https://dex.k8s.example.com/
    k8s_master_uri: https://api.k8s.example.com
    client_id: dex-k8s-authenticator
    client_secret: generatedLongRandomPhrase
    redirect_uri: https://login.k8s.example.com/callback/
    k8s_ca_pem: |
      -----BEGIN CERTIFICATE-----
      AAAAAAAAAAABBBBBBBBBBCCCCCC
      -----END CERTIFICATE-----
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
  path: /
  hosts:
    - login.k8s.example.com
  tls:
    - secretName: cert-auth-login
      hosts:
        - login.k8s.example.com
EOF

Dex, dex-k8s-authenticator เดŽเดจเตเดจเดฟเดต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•:

helm install -n dex --namespace kube-system --values values-dex.yml charts/dex
helm install -n dex-auth --namespace kube-system --values values-auth.yml charts/dex-k8s-authenticator

เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚ (Dex เด•เต‹เดกเต 400 เดจเตฝเด•เดฃเด‚, dex-k8s-authenticator เด•เต‹เดกเต 200 เดจเตฝเด•เดฃเด‚):

curl -sI https://dex.k8s.example.com/callback | head -1
HTTP/2 400
curl -sI https://login.k8s.example.com/ | head -1
HTTP/2 200

RBAC เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

เด—เตเดฐเต‚เดชเตเดชเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดฑเต‹เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดตเดพเดฏเดจ-เดฎเดพเดคเตเดฐเด‚ เด†เด•เตโ€Œเดธเดธเตเดธเต:

cat << EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-read-all
rules:
  -
    apiGroups:
      - ""
      - apps
      - autoscaling
      - batch
      - extensions
      - policy
      - rbac.authorization.k8s.io
      - storage.k8s.io
    resources:
      - componentstatuses
      - configmaps
      - cronjobs
      - daemonsets
      - deployments
      - events
      - endpoints
      - horizontalpodautoscalers
      - ingress
      - ingresses
      - jobs
      - limitranges
      - namespaces
      - nodes
      - pods
      - pods/log
      - pods/exec
      - persistentvolumes
      - persistentvolumeclaims
      - resourcequotas
      - replicasets
      - replicationcontrollers
      - serviceaccounts
      - services
      - statefulsets
      - storageclasses
      - clusterroles
      - roles
    verbs:
      - get
      - watch
      - list
  - nonResourceURLs: ["*"]
    verbs:
      - get
      - watch
      - list
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create"]
EOF

ClusterRoleBinding-เดจเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚:

cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: dex-cluster-auth
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-read-all
subjects:
  kind: Group
  name: "super-org:team-red"
EOF

เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดชเดฐเต€เด•เตเดทเดฃเดคเตเดคเดฟเดจเต เดคเดฏเตเดฏเดพเดฑเดพเดฃเต.

เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ

เดฒเต‹เด—เดฟเตป เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด• (https://login.k8s.example.com) เด•เต‚เดŸเดพเดคเต† เดจเดฟเด™เตเด™เดณเตเดŸเต† GitHub เด…เด•เตเด•เต—เดฃเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเด•:

GitHub OAuth, Dex เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Kubernetes-เตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เตเด•
เดฒเต‹เด—เดฟเตป เดชเต‡เดœเต

GitHub OAuth, Dex เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Kubernetes-เตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เตเด•
เดฒเต‹เด—เดฟเตป เดชเต‡เดœเต GitHub-เดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตโ€Œเดคเต

GitHub OAuth, Dex เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Kubernetes-เตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เตเด•
 เด†เด•เตโ€Œเดธเดธเต เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตโ€Œเดค เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดชเดพเดฒเดฟเด•เตเด•เตเด•

เดตเต†เดฌเตโ€Œเดชเต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เต‹เดชเตเดชเดฟ-เดชเต‡เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดค เดถเต‡เดทเด‚, เดžเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป kubectl เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚:

kubectl get po
NAME                READY   STATUS    RESTARTS   AGE
mypod               1/1     Running   0          3d

kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"

เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดฅเดพเดชเดจเดคเตเดคเดฟเดฒเต† เดŽเดฒเตเดฒเดพ GitHub เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เตเด‚ เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด•เดพเดฃเดพเดจเตเด‚ เดชเต‹เดกเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เด…เดต เดฎเดพเดฑเตเดฑเดพเตป เด…เดตเตผเด•เตเด•เต เด…เดตเด•เดพเดถเดฎเดฟเดฒเตเดฒ.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•