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
- installare kubectl (guida)
- essere registrati in uno dei servizi IAM supportati: "https://iam.cloud.infn.it" o "https://iam.quantumtea.it".
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