L'accesso al cluster Kubernetes richiede una corretta configurazione di kubectl, il client di gestione per Kubernetes.

Per semplificare il processo di configurazione e autenticazione, sono stati sviluppati due plugin distinti per kubectl: kubectl-openstack e kubectl-iam. Questi plugin sono differenziati in base alla tipologia di autenticazione richiesta.

  • kubectl-openstack: questo plugin è necessario per tutti gli utenti registrati presso CloudVeneto ed è basato sul modello di autenticazione di OpenStack, utilizzando il token Keystone;

  • kubectl-iam: nel caso in cui si desideri fornire accesso a utenti esterni a CloudVeneto, i quali siano registrati presso uno dei servizi IAM supportati dal nostro cluster (di default: "https://iam.cloud.infn.it" e "https://iam.quantumtea.it"), sarà necessario utilizzare il plugin kubectl-iam.

Configurazione di kubectl con il plugin kubectl-openstack

Prerequisiti

  • installare kubectl (guida)
  • possedere una password OpenStack configurata attraverso la dashboard di CloudVeneto.

Installazione del plugin

Scaricare il file kubectl-openstack e copiarlo in /usr/local/bin/ . Potrebbe essere necessario rendere il file eseguibile (chmod 755 kubectl-openstack).

Utilizzo

Per visualizzare la sintassi e l'elenco dei parametri usare l'help:

$ kubectl-openstack --help
Usage: kubectl-openstack [FLAG] -user <USERNAME> -password <PASSOWRD> -project <PROJECT>

Options:
  -force
    	overwrite the existing configuration
  -password string
    	your CloudVeneto password
  -project string
    	your CloudVeneto project
  -user string
    	your CloudVeneto username

Il parametro project permette all'utente di selezionare uno tra i possibili progetti CloudVeneto a cui l'utente appartiene. Il nome del progetto viene mappato nell'omonimo namespace in Kubernetes. Di default ad un namespace non e' associato alcun nodo ma l'utente CloudVeneto potra' crearli autonomamente e senza l'intervento dell'amministratore del cluster.

Nell'esempio seguente viene configurata kubectl usando le credenziali OpenStack ed indicando CMS come progetto/namespace:

$ kubectl-openstack -user zangrand@infn.it -password ******** -project CMS
kubectl configured correctly

L'esecuzione del comando genera la configurazione richiesta modificando il kubeconfig ($HOME/.kube/config) come segue:

apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://api.kube.cloudveneto.it
  name: kube.cloudveneto.it
contexts:
- context:
    cluster: kube.cloudveneto.it
    namespace: cms
    user: openstack
  name: CMS@kube.cloudveneto.it
current-context: CMS@kube.cloudveneto.it
kind: Config
preferences: {}
users:
- name: openstack
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args: null
      command: kubectl-openstack
      env:
      - name: domain
        value: Default
      - name: keystone-url
        value: https://keystone-cv.pd.infn.it/v3
      - name: username
        value: zangrand@infn.it
      - name: password
        value: ********
      - name: project
        value: CMS
      - name: cluster
        value: kube.cloudveneto.it
      - name: token
        value: gAAAAABk7dbAVFOPfLrPLDbGjtj5dwhVIZUeiUoOhWgTqXzxMkqf2fXNZwqNBDmwMp7DQL3j_1RUVTbnlEqCV4U4XMb6DKH50LSvfXZgPYH-iT6rGsXtMkTzKJQfY5msWUoyCWKtVCJchtfkCSyEaYJUu-dkirZAMMo6YNTmj5h5jScna1x2hKA
      interactiveMode: Never
      provideClusterInfo: false

Configurazione di kubectl con il plugin kubectl-iam

Prerequisiti

Installazione del plugin

Scaricare il file kubectl-iam e copiarlo in /usr/local/bin/ . Potrebbe essere necessario rendere il file eseguibile (chmod 755 kubectl-iam)

Utilizzo

Per visualizzare la sintassi e l'elenco dei parametri usare l'help:

$ kubectl-iam --help
Usage: ./kubectl-iam [FLAG] -iam-url <URL> -group <GROUP>

Options:
  -force
    	overwrite the existing configuration
  -group string
    	your IAM group
  -iam-url string
    	the IAM url (default "https://iam.cloud.infn.it") 

Il parametro group permette all'utente di selezionare uno tra i possibili gruppi definiti in IAM a cui l'utente appartiene. Il nome del gruppo viene mappato nell'omonimo namespace in Kubernetes ed e' indipendente dal fatto che esista o meno un corrispondente progetto in CloudVeneto. Di default ad un namespace non e' associato alcun nodo, ed a differenza della precedente configurazione (kubectll-openstack) l'utente IAM non potra' (almeno per ora) creare nodi autonomamente, ma sara' l'amministratore del cluster a decidere a quali nodi concedere l'accesso.

Nell'esempio seguente viene configurata kubectl usando le credenziali IAM:

$ kubectl-iam -iam-url https://iam.quantumtea.it -group QST
please open the link in your web browser: https://iam.quantumtea.it/device?user_code=BB3FXJ

or scan the QR code

█████████████████████████████████████████
█████████████████████████████████████████
████ ▄▄▄▄▄ ██  █▀██▀▄█ ▄ ▄▄▄██ ▄▄▄▄▄ ████
████ █   █ █ █ ▀▄█▄▀▄█▀█▄▄██ █ █   █ ████
████ █▄▄▄█ █ ▀▀██▄▄▄▄█▀▀▄  █▀█ █▄▄▄█ ████
████▄▄▄▄▄▄▄█ ▀ █ █ █ █▄▀ ▀ ▀ █▄▄▄▄▄▄▄████
████▄█  ▄▄▄▀▀▀▄ █ ▄█    ▀▀▄▀██  ▄  ▀▀████
████▀▄  ▀█▄█▀███▀ ▄   ▀█▀▀▀▀▄▀▀█ ▀  ▀████
████▄▄▄▀▀▀▄▀▀▄▀  ▀▄ ▄▀▀█▄ ▄▄▄▄▀▄▄ ▀  ████
████▀▄ ▄█ ▄█▀   ███ ▄▄▀█▄ ▀██  █   ▄█████
█████▀▄█▄▄▄ ██▀▄█▀▀▄▀▄▀▀ ▀▄  ▄▀ ▄ ▀▀ ████
████ ▀ ▄▄█▄ ▀ ▄▄  ▀ ▀█▄█ ▀▄██    ▀ ▀█████
████▀  ▀█ ▄▄▀▀▀▀ █▀ ▀▀▄▄▀▄  ▀▄▀██▄▀▄▀████
████ █ ▀▀▀▄▀ ▄▀▀▀ ▄█▀█▄ ▀▀▄██▀▄ ▄ ▀ █████
████▄████▄▄▄▀    ▄▀█▀ █ ▀█ █ ▄▄▄ █▀█▀████
████ ▄▄▄▄▄ █▀▄▀█▄██▄  ▀█  █  █▄█ ▀  ▀████
████ █   █ █  ▄██ ▄▀▄█▀██ ▄▀  ▄▄  ▀▀▀████
████ █▄▄▄█ █▄██▄▀▄▄ ▄█▀▀█ ▄█▄▀▄▄▀  ██████
████▄▄▄▄▄▄▄█▄█▄▄█▄▄▄█▄▄▄▄█▄▄▄██▄█▄█▄█████
█████████████████████████████████████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

..................................................................................
kubectl configured correctly

L'esecuzione del comando genera la configurazione richiesta modificando il kubeconfig ($HOME/.kube/config) come segue:

apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://api.kube.cloudveneto.it
  name: kube.cloudveneto.it
contexts:
- context:
    cluster: kube.cloudveneto.it
    namespace: qst
    user: oidc
  name: QST@kube.cloudveneto.it
current-context: QST@kube.cloudveneto.it
kind: Config
preferences: {}
users:
- name: oidc
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args: null
      command: kubectl-iam
      env:
      - name: oidc-issuer-url
        value: https://iam.quantumtea.it
      - name: group
        value: QST
      - name: cluster
        value: kube.cloudveneto.it
      - name: oidc-client-id
        value: 7c9bea94-34fd-4081-a9d9-034ff3604191
      - name: oidc-client-secret
        value: ALiGRKfU-qXUSVl6rmC_lVxDgXZWFxnJ1LNAJLdCluhkvGwLYJVcrHpJQXmORT1XM8x4yfG2Es0ETOO4nKbMDOI
      - name: token
        value: eyJraWQiOiJyc2ExIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI1ZTY4ZjNhNi0wMTc2LTQwOTctOGY5OC1jODI0NmIyY2QwYzMiLCJpc3MiOiJodHRwczpcL1wvaWFtLnF1YW50dW10ZWEuaXQiLCJncm91cHMiOlsidGVzdCIsInFzdCJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ6YW5ncmFuZCIsIm9yZ2FuaXNhdGlvbl9uYW1lIjoiUXVhbnR1bVRFQSIsImNsaWVudF9pZCI6IjdjOWJlYTk0LTM0ZmQtNDA4MS1hOWQ5LTAzNGZmMzYwNDE5MSIsIm5iZiI6MTY5MzMxMTkzMywic2NvcGUiOiJlbWFpbCBvcGVuaWQgb2ZmbGluZV9hY2Nlc3MgcHJvZmlsZSIsIm5hbWUiOiJMaXNhIFphbmdyYW5kbyIsImV4cCI6MTY5MzMxNTUzMywiaWF0IjoxNjkzMzExOTMzLCJqdGkiOiI2ZWNlNzNkZS0wM2QyLTRiNmEtYTFmNy01ZjU3NGRhZTUzN2MiLCJlbWFpbCI6Imxpc2EuemFuZ3JhbmRvQHBkLmluZm4uaXQifQ.Z2EfysonOnoHe2dKIPeRDuYoccUN_i4pZ7nqHxh_KEnkkVMbPoPWWyYZGklo4xk1__ELPpt6Ibg3G_-Py6h6PoN0RmT-jhx191GrPKCGp7GrnZbBz_u2Rc-u00B1PB5_QD614W8avzsOlsiV6lf3pLIFUhvC_UZMsjL0sjw9p3s
      - name: refresh-token
        value: eyJhbGciOiJub25lIn0.eyJleHAiOjE2OTU5MDM5MzMsImp0aSI6Ijc1MWU2Yjk3LTY4MzItNDMxNy1hYTZkLWMzZGFhNmI0M2RmZSJ9.
      interactiveMode: Never
      provideClusterInfo: false
   
  • No labels