Dex рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг: LDAP рдХреЛ рддреЗрдЬ рдХрд░реЗрдВ

рдЖрдЬ рдореИрдВ LDAP рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ Dex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Kubernetes рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдЬрд╛рдКрдВрдЧрд╛, рдФрд░ рдпрд╣ рднреА рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рд╕реНрдерд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Dex рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред 

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдбреЗрдХреНрд╕ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдПрд▓рдбреАрдПрдкреА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ред рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдбреЗрдХреНрд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВ:

  1. OpenLDAP рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рдкрд░ STARTTLS рд╕рдорд░реНрдерди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред 
  2. рд╣рдо рдЕрдкрдиреЗ рд╕рдВрдЧрдарди рдХреА LDAP рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ ред
  3. рдХреНрдпреВрдм-рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдкрд░ рдУрдЖрдИрдбреАрд╕реА (рдУрдкреЗрдирдЖрдИрдбреА рдХрдиреЗрдХреНрдЯ) рд╕рдкреЛрд░реНрдЯ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ред
  4. рдЙрди рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП SAN рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ Dex рдХрд░реЗрдЧрд╛ ред
  5. Dex рдФрд░ Dex-рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рд╣рдо LDAP рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рд╕реНрдерд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ ред 
  6. рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ kubeconfig рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ ред
  7. рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рдореВрд╣реЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП RBAC рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрдЯ рдХрд░реЗрдВ ред

рддреЛ рдЪрд▓рддреЗ рд╣реИрдВред



рдореИрдВ рдЖрдкрдХреЛ рд╣реЗрд▓реНрдо рд╕рдВрд╕реНрдХрд░рдг 3 рдФрд░ рдЗрдирдЧреНрд░реЗрдб рдХреЗ рд╕рд╛рде - рд╕рд╛рде рдЕрдиреНрдп рдбреЛрдореЗрди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ ред

OpenLDAP рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рд╣рдо OpenLDAP рдХрд╛ рдЙрдкрдпреЛрдЧ ubuntu 18.04 рд╡рд┐рддрд░рдг рдкрд░ LDAP рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВрдЧреЗред 
рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХрд╛ рдирд╛рдо: openldap.dtln.cloudред 

  1. рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ рдФрд░ рд╣рдо OpenLDAP рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрдВ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

    sudo apt update 
    sudo apt install slapd ldap-utils
    

  2. рд╣рдорд╛рд░реЗ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП OpenLDAP рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛:

    sudo dpkg-reconfigure slapd 
    

  3. рдирд╣реАрдВ рдЪреБрдиреЗрдВ :


  4. рдбреЛрдореЗрди рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ:


  5. рд╕рдВрдЧрдарди рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ:


  6. рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджреЛрд╣рд░рд╛рдПрдБ:


  7. рд╣рдо STARTTLS рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ:

    sudo apt install gnutls-bin ssl-cert
    

  8. CA-:

    sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
    

  9. /etc/ssl/ca.info:

    cn = DTLN Company
    ca
    cert_signing_key
    

  10. CA-a , :

    sudo certtool --generate-self-signed --load-privkey /etc/ssl/private/cakey.pem --template /etc/ssl/ca.info --outfile /etc/ssl/certs/cacert.pem
    sudo certtool --generate-privkey --bits 1024 --outfile /etc/ssl/private/openldap_key.pem
    

  11. /etc/ssl/openldap.info:

    organization = DTLN Company
    cn = openldap.dtln.cloud
    tls_www_server
    encryption_key
    signing_key
    expiration_days = 3650
    

  12. :

    sudo certtool --generate-certificate --load-privkey /etc/ssl/private/openldap_key.pem --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem --template /etc/ssl/openldap.info --outfile /etc/ssl/certs/openldap.pem
    

  13. OpenLDAP STARTTLS. certinfo.dif:

    dn: cn=config
    add: olcTLSCACertificateFile
    olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
    -
    add: olcTLSCertificateFile
    olcTLSCertificateFile: /etc/ssl/certs/openldap.pem
    -
    add: olcTLSCertificateKeyFile
    olcTLSCertificateKeyFile: /etc/ssl/private/openldap_key.pem
    

  14. :

    sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.dif
    

  15. :

    sudo chgrp openldap /etc/ssl/private/openldap_key.pem
    sudo chmod 0640 /etc/ssl/private/openldap_key.pem
    sudo gpasswd -a openldap ssl-cert
    sudo systemctl restart slapd.service
    

  16. , /etc/ldap/ldap.conf :

    TLS_CACERT /etc/ssl/certs/cacert.pem
    

  17. STARTTLS:

    ldapwhoami -H ldap://openldap.dtln.cloud -x -ZZ
    

    :



    :


LDAP-


  1. , x , Kubernetes. content.ldif:

    dn: ou=People,dc=openldap,dc=dtln,dc=cloud
    objectClass: organizationalUnit
    ou: People
    dn: cn=jane,ou=People,dc=openldap,dc=dtln,dc=cloud
    objectClass: person
    objectClass: inetOrgPerson
    sn: doe
    cn: jane
    mail: janedoe@openldap.dtln.cloud
    userpassword: foo_password
    
    dn: cn=john,ou=People,dc=openldap,dc=dtln,dc=cloud
    objectClass: person
    objectClass: inetOrgPerson
    sn: doe
    cn: john
    mail: johndoe@openldap.dtln.cloud
    userpassword: bar_password
    
    # Group definitions.
    
    dn: ou=Groups,dc=openldap,dc=dtln,dc=cloud
    objectClass: organizationalUnit
    ou: Groups
    
    dn: cn=admins,ou=Groups,dc=openldap,dc=dtln,dc=cloud
    objectClass: groupOfNames
    cn: admins
    member: cn=jane,ou=People,dc=openldap,dc=dtln,dc=cloud
    
    dn: cn=developers,ou=Groups,dc=openldap,dc=dtln,dc=cloud
    objectClass: groupOfNames
    cn: developers
    member: cn=jane,ou=People,dc=openldap,dc=dtln,dc=cloud
    member: cn=john,ou=People,dc=openldap,dc=dtln,dc=cloud
    

  2. рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:

    ldapadd -x -D cn=admin,dc=openldap,dc=dtln,dc=cloud -W -f content.ldif
    

  3. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реИрдВ:

    ldapwhoami -vvv -h openldap.dtln.cloud -p 389 -D cn=john,ou=People,dc=openldap,dc=dtln,dc=cloud -x -w bar_password -ZZ
    ldapwhoami -vvv -h openldap.dtln.cloud -p 389 -D cn=jane,ou=People,dc=openldap,dc=dtln,dc=cloud -x -w foo_password -ZZ
    

рд╣рдо OpenID рдХрдиреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ


рдЖрдЗрдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗрдЯрдЕрдк рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред 

рд╣рдо рдбреЗрдХреНрд╕ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЛрдореЗрди dex.ash.dtln.cloud рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП login.ash.dtln.cloud рд▓реЙрдЧрд┐рди рдХрд░рддреЗ рд╣реИрдВред

рд╣рдордиреЗ kubeadm рдпрд╛ kops рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЗ рдмрд┐рдирд╛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП OIDC рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рддреБрд░рдВрдд рд╕рд┐рд╕реНрдЯрдо рдпреВрдирд┐рдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  1. рд╣рдо рдЗрдХрд╛рдИ /etc/systemd/system/kube-apiserver.service рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ExecStart рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ :

    --oidc-client-id=dex-k8s-authenticator \
    --oidc-groups-claim=groups \
    --oidc-username-claim=email \
    --oidc-issuer-url=https://dex.ash.dtln.cloud/ \
    
  2. рд╣рдо рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╡реЗ рдмрдврд╝ рдЧрдП рд╣реИрдВ:

    sudo systemctl daemon-reload
    sudo systemctl restart kube-apiserver
    sudo systemctl status kube-apiserver
    

рдПрдХ рдорд▓реНрдЯреА-рдбреЛрдореЗрди рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛рдПрдВ


рдЕрдм рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЬрд╛рдПрдВред 

  1. рд╣рдо рд╣реЗрд▓реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдг-рдкреНрд░рдмрдВрдзрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: 

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm install cert-manager --namespace kube-system jetstack/cert-manager --version v0.13.0
    

  2. рд╣рдо рд╣рдорд╛рд░реЗ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП SAN рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред

    ---
    apiVersion: cert-manager.io/v1alpha2
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-dex
    spec:
      acme:
        email: kubernetes@dataline.ru
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: letsencrypt-key-dex
        solvers:
        - http01:
            ingress:
              class: nginx
    ---
    apiVersion: cert-manager.io/v1alpha2
    kind: Certificate
    metadata:
      name: auth-dex
      namespace: kube-system
    spec:
      secretName: cert-auth-dex
      issuerRef:
        kind: ClusterIssuer
        name: letsencrypt-dex
      commonName: dex.ash.dtln.cloud
      dnsNames:
      - dex.ash.dtln.cloud
      - login.ash.dtln.cloud
    

  3. рд╣рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

    kubectl apply -f cert.yaml
    

  4. рдЕрдм рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЕрдиреБрд░реЛрдз рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ: 

    kubectl get certificates --all-namespaces
    kubectl get challenges --all-namespaces
    

  5. рд╣рдо рдкреБрд╖реНрдЯрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:



рдбреЗрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


рдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рд╕реЗ ca.crt, ca.key рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рд╡реЗ / etc / kubernetes / pki / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд╣рдореЗрдВ OpenLDAP рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛, рдЬреЛ рдкрде /etc/ssl/certs/cacert.pem рдкрд░ рд╕реНрдерд┐рдд рд╣реИред

  1. рдбреАрдПрдХреНрд╕-рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рдПрдВ:

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

  2. рд╣рдо рдбреЗрдХреНрд╕-рдСрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП ca.crt рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:

    ---
    global:
      deployEnv: prod
    dexK8sAuthenticator:
      clusters:
        - name: 'ash.dtln.cloud'
          short_description: "k8s cluster"
          description: "Kubernetes cluster"
          issuer: https://dex.ash.dtln.cloud/
          k8s_master_uri: https://kubernetes.dtln.cloud:6443 # url or ip
          client_id: dex-k8s-authenticator
          static_context_name: false
          client_secret: acDEgDEcIg7RX0U7A9hlW2pGGraHDuMAZ4qFEKg2fUHHxr8
          redirect_uri: https://login.ash.dtln.cloud/callback
          k8s_ca_pem: |
            -----BEGIN CERTIFICATE-----
            #   ca.crt
            -----END CERTIFICATE-----
    ingress:
      enabled: true
      annotations:
        kubernetes.io/ingress.class: nginx
        kubernetes.io/tls-acme: "true"
      path: /
      hosts:
        - login.ash.dtln.cloud
      tls:
        - secretName: cert-auth-dex
          hosts:
            - login.ash.dtln.cloud
    
    

  3. рд╣рдо рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cacert.pem рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ base64 рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ:

    cacert.pem | base64
    

  4. Dex, . staticPasswords bcrypt:

    ---
    global:
      deployEnv: prod
    tls:
      certificate: |-
        -----BEGIN CERTIFICATE-----
        # ca.crt
        -----END CERTIFICATE-----
      key: |-
        -----BEGIN RSA PRIVATE KEY-----
        # ca.key
        -----END RSA PRIVATE KEY-----
    ingress:
      enabled: true
      annotations:
        kubernetes.io/ingress.class: nginx
        kubernetes.io/tls-acme: "true"
      path: /
      hosts:
        - dex.ash.dtln.cloud
      tls:
        - secretName: cert-auth-dex
          hosts:
            - dex.ash.dtln.cloud
    serviceAccount:
      create: true
      name: dex-auth-sa
    config:
      issuer: https://dex.ash.dtln.cloud/
      storage:
        type: kubernetes
        config:
          inCluster: true
      web:
        http: 0.0.0.0:5556
      frontend:
        theme: "coreos"
        issuer: "kube-dtln"
        issuerUrl: "https://login.ash.dtln.cloud"
      expiry:
        signingKeys: "6h"
        idTokens: "24h"
      logger:
        level: debug
        format: json
      oauth2:
        responseTypes: ["code", "token", "id_token"]
        skipApprovalScreen: true
    
      connectors:
      - type: ldap
        id: ldap
        name: LDAP
        config:
          insecureNoSSL: false
          insecureSkipVerify: false
          startTLS: true #   
          rootCAData: |-
            # cacert.pem  base64 
            # 
         
          host: openldap.dtln.cloud:389
          usernamePrompt: Email Address
          userSearch:
            baseDN: ou=People,dc=openldap,dc=dtln,dc=cloud
            filter: "(objectClass=person)"
            username: mail
            idAttr: DN
            emailAttr: mail
            nameAttr: cn
          groupSearch:
            baseDN: ou=Groups,dc=openldap,dc=dtln,dc=cloud
            filter: "(objectClass=groupOfNames)"
    
            userMatchers:
            - userAttr: DN
              groupAttr: member
    
            nameAttr: cn
    
      staticClients:
      - id: dex-k8s-authenticator
        name: Kubernetes Dev Cluster
        secret: 'acDEgDEcIg7RX0U7A9hlW2pGGraHDuMAZ4qFEKg2fUHHxr8'
        redirectURIs:
          - https://login.ash.dtln.cloud/callback
    
      enablePasswordDB: True
    
      staticPasswords:
        #       base64
      - email: "admin@dtln.cloud"
        # bcrypt hash of the string "password"
        hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W"
        username: "admin"
        userID: "08a8684b-db88-4b73-90a9-3cd1661f5466"
    
    

  5. dex dex-auth- :

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


kubeconfig


  1. , podтАЩ. login.ash.dtln.cloud. , mail- . 

    static- mail:


  2.  Dex-auth. C kubeconfig-. :


  3. рдЕрдм рдХреНрд▓рд╕реНрдЯрд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рд╕рд╣реА рд╣реИ, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо RBAC рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред



рд╣рдо RBAC рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ


  1. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд▓рд╕реНрдЯрд░-рдПрдбрдорд┐рди рд╕рд┐рд╕реНрдЯрдо рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдореВрд╣ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреГрд╢реНрдп рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╕рднреА рд╕рдВрд╕рд╛рдзрди рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддрдм crb.yml рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рддрд░рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: dex-admin
      namespace: kube-system
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: User
      name: "admin@dtln.cloud"
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: dex-developers
      namespace: kube-system
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: view
    subjects:
    - kind: Group
      name: "developers"
    

  2. рдореБрдЦреНрдп рд╕рдВрджрд░реНрдн рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реНрдорд┐рдд рдпрд╛рдореНрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

    kubectl config set-context default
    kubectl apply -f crb.yml
    

  3. рд╣рдо рдЙрдкрд▓рдмреНрдз рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ:

    kubectl config get-contexts
    kubectl config set-context johndoe-ash.dtln.cloud
    

рдпрд╣ OpenLDAP рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ Dex рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ:

  • рдпрджрд┐ рд╕рдорд╕реНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ yaml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕реНрд╡рд░реВрдкрдг рдФрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред 
  • рдкрддреЛрдВ рдореЗрдВ рд╕реНрд▓реИрд╢ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 
  • podтАЩ Dex, Dex-auth, kube-api .

All Articles