GitHub OAuth рдФрд░ Dex рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг

рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП Dex, dex-k8s-Authator рдФрд░ GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

рдЫрд╡рд┐

рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрд░ рд░реВрд╕реА-рднрд╛рд╖рд╛ рдЪреИрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдореЗрдо

рдкрд░рд┐рдЪрдп


рд╣рдо Kubernetes рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдФрд░ QA рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ kubectl рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдУрдкрдирд╢рд┐рдлреНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реИрдирд┐рд▓рд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рдореВрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

  • dex-k8s-Authator - kubectl config рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ
  • рдбреЗрдХреНрд╕ - рдУрдкрдирдЖрдИрдбреА рдХрдиреЗрдХреНрдЯ рдкреНрд░рджрд╛рддрд╛
  • GitHub - рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╣рдо рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

рд╣рдордиреЗ Google OIDC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдП , рдЗрд╕рд▓рд┐рдП GitHub рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдлреА рдареАрдХ рдерд╛ред рд╕рдореВрд╣ рдореИрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛, рдЖрдк рд╕рдореВрд╣-рдЖрдзрд╛рд░рд┐рдд RBAC рдиреАрддрд┐рдпрд╛рдБ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред

рддреЛ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╣рдорд╛рд░реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ:

рдЫрд╡рд┐
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛

рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рдЕрдВрдХ:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди dex-k8s- рдкреНрд░рдорд╛рдгрдХ ( login.k8s.example.com )
  2. dex-k8s-Authator рдЕрдиреБрд░реЛрдз рдХреЛ Dex ( dex.k8s.example.com ) рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
  3. рдбреЗрдХреНрд╕ GitHub рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ
  4. GitHub рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Dex рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
  5. рдбреЗрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдбреЗрдХреНрд╕-рдХреЗ 8 рдПрд╕-рдСрдереЗрдВрдЯреЗрдЯрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
  6. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ GitHub рд╕реЗ OIDC рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИ
  7. dex-k8s-Authator, kubeconfig рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдЬреЛрдбрд╝рддрд╛ рд╣реИ
  8. Kubectl KubeAPIServer рдХреЛ рдЯреЛрдХрди рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
  9. Kubectl рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдЯреЛрдХрди рд░рд┐рдЯрд░реНрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ KubeAPIServer
  10. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ kubectl рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИ

рддреИрдпрд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ


рдмреЗрд╢рдХ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ ( k8s.example.com ) рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде HELM рднреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ GitHub (рд╕реБрдкрд░-рдСрд░реНрдЧ) рдкрд░ рдПрдХ рд╕рдВрдЧрдарди рднреА рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ HELM рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ ред

рдкрд╣рд▓реЗ рд╣рдореЗрдВ GitHub рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдВрдЧрдарди рдХреЗ рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░ https://github.com/organizations/super-org/settings/applications , ( https://github.com/organizations/super-org/settings/applications ) рдФрд░ рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ (рдЕрдзрд┐рдХреГрдд OAuth App):
рдЫрд╡рд┐
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 рдХреНрд▓рд╕реНрдЯрд░рд╕рд┐рдпрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ le-clusterissuer рдмрд╕реНрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣реЗрд▓реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрдирд╛рдПрдВ:

 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: k8s-admin@example.com privateKeySecretRef: name: le-clusterissuer http01: {} EOF 

KubeAPIServer рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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 

рд╣рдо рд╕рдореВрд╣реЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП kops рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╛рди рд╣реИред

рдбреЗрдХреНрд╕ рдФрд░ рдбреЗрдХреНрд╕-рдХреЗ -8-рдСрдереЗрдВрдЯреЗрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдорд╛рд╕реНрдЯрд░ рд╕реЗ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдФрд░ рдПрдХ рдХреБрдВрдЬреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рдЦреАрдВрдЪрдирд╛:

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

рдбреЗрдХреНрд╕-рдХреЗ -8-рдСрдерд░реЗрдЯрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ:

 git clone git@github.com:mintel/dex-k8s-authenticator.git cd dex-k8s-authenticator/ 

рдореВрд▓реНрдпреЛрдВ-рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЕрдкрдиреЗ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдЪрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд▓реЛ 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 

рдФрд░ рдбреЗрдХреНрд╕- k8s- рдкреНрд░рдорд╛рдгрдХ рдХреЗ рд▓рд┐рдП:
 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 

рдбреЗрдХреНрд╕ рдФрд░ рдбреЗрдХреНрд╕- k8s- рдкреНрд░рдорд╛рдгрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 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 

рдЖрдЗрдП рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реЗрд╡рд╛рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ (рдбреЗрдХреНрд╕ рдХреЛ рдХреЛрдб 400, рдФрд░ рдбреЗрдХреНрд╕-рдХреЗ 8 рдПрд╕-рдСрдереЗрдВрдЯреЗрдЯрд░ - рдХреЛрдб 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 

рдЖрд░рдмреАрдПрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рд╣рдо рд╕рдореВрд╣ рдореЗрдВ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рд╡рд╛рд▓реЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ:

 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 рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛

рдЫрд╡рд┐
рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ

рд╡реЗрдм рдкреЗрдЬ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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 "amet@example.com" cannot delete pods in the namespace "default" 

рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рд╕рдВрдЧрдарди рдХреЗ рд╕рднреА рдЧрд┐рдЯрд╣рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд▓реА рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред

Source: https://habr.com/ru/post/hi436238/


All Articles