Cree un archivo kubeconfig
Puede añadir un clúster a Astra Control Service mediante un archivo kubeconfig. En función del tipo de cluster que desee agregar, es posible que necesite crear manualmente un archivo kubeconfig para el cluster mediante pasos específicos.
Cree un archivo kubeconfig para los clústeres de Amazon EKS
Siga estas instrucciones para crear un archivo kubeconfig y un secreto de token permanente para los clústeres de Amazon EKS. Se necesita un secreto de token permanente para los clústeres alojados en EKS.
-
Siga las instrucciones de la documentación de Amazon para generar un archivo kubeconfig:
-
Cree una cuenta de servicio del siguiente modo:
-
Cree un archivo de cuenta de servicio llamado
astracontrol-service-account.yaml
.Ajuste el nombre de la cuenta de servicio según sea necesario. El espacio de nombres
kube-system
es necesario para estos pasos. Si cambia aquí el nombre de la cuenta de servicio, debe aplicar los mismos cambios en los siguientes pasos.
astracontrol-service-account.yaml
+
apiVersion: v1 kind: ServiceAccount metadata: name: astra-admin-account namespace: kube-system
-
-
Aplicar la cuenta de servicio:
kubectl apply -f astracontrol-service-account.yaml
-
Cree un
ClusterRoleBinding
archivo llamadoastracontrol-clusterrolebinding.yaml
.astracontrol-clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: astra-admin-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: astra-admin-account namespace: kube-system
-
Aplique el enlace de roles del clúster:
kubectl apply -f astracontrol-clusterrolebinding.yaml
-
Se ha llamado a crear un archivo secreto de token de cuenta de servicio
astracontrol-secret.yaml
.astracontrol-secret.yaml
apiVersion: v1 kind: Secret metadata: annotations: kubernetes.io/service-account.name: astra-admin-account name: astra-admin-account namespace: kube-system type: kubernetes.io/service-account-token
-
Aplique el secreto de token:
kubectl apply -f astracontrol-secret.yaml
-
Recupere el secreto de token:
kubectl get secret astra-admin-account -n kube-system -o jsonpath='{.data.token}' | base64 -d
-
Sustituya el
user
Sección del archivo kubeconfig de AWS EKS con el token, como se muestra en el siguiente ejemplo:user: token: k8s-aws-v1.aHR0cHM6Ly9zdHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1HZXRDYWxsZXJJZGVudGl0eSZWZXJzaW9uPTIwMTEtMDYtMTUmWC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBM1JEWDdKU0haWU9LSEQ2SyUyRjIwMjMwNDAzJTJGdXMtd2VzdC0yJTJGc3RzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyMzA0MDNUMjA0MzQwWiZYLUFtei1FeHBpcmVzPTYwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCUzQngtazhzLWF3cy1pZCZYLUFtei1TaWduYXR1cmU9YjU4ZWM0NzdiM2NkZGYxNGRhNzU4MGI2ZWQ2zY2NzI2YWIwM2UyNThjMjRhNTJjNmVhNjc4MTRlNjJkOTg2Mg
Cree un archivo kubeconfig para los clústeres de Red Hat OpenShift Service en AWS (ROSA)
Siga estas instrucciones para crear un archivo kubeconfig para clústeres de Red Hat OpenShift Service en AWS (ROSA).
-
Inicie sesión en el clúster ROSA.
-
Cree una cuenta de servicio:
oc create sa astracontrol-service-account
-
Añada un rol de clúster:
oc adm policy add-cluster-role-to-user cluster-admin -z astracontrol-service-account
-
Con el siguiente ejemplo, cree un archivo de configuración secreto de cuenta de servicio:
secret-astra-sa.yaml
apiVersion: v1 kind: Secret metadata: name: secret-astracontrol-service-account annotations: kubernetes.io/service-account.name: "astracontrol-service-account" type: kubernetes.io/service-account-token
-
Cree el secreto:
oc create -f secret-astra-sa.yaml
-
Edite la cuenta de servicio que ha creado y agregue el nombre secreto de la cuenta de servicio de Astra Control a
secrets
sección:oc edit sa astracontrol-service-account
apiVersion: v1 imagePullSecrets: - name: astracontrol-service-account-dockercfg-dvfcd kind: ServiceAccount metadata: creationTimestamp: "2023-08-04T04:18:30Z" name: astracontrol-service-account namespace: default resourceVersion: "169770" uid: 965fa151-923f-4fbd-9289-30cad15998ac secrets: - name: astracontrol-service-account-dockercfg-dvfcd - name: secret-astracontrol-service-account ####ADD THIS ONLY####
-
Enumere los secretos de la cuenta de servicio, reemplazando
<CONTEXT>
con el contexto correcto para su instalación:kubectl get serviceaccount astracontrol-service-account --context <CONTEXT> --namespace default -o json
El final de la salida debe ser similar a lo siguiente:
"secrets": [ { "name": "astracontrol-service-account-dockercfg-dvfcd"}, { "name": "secret-astracontrol-service-account"} ]
Los índices de cada elemento de la
secrets
la matriz comienza con 0. En el ejemplo anterior, el índice paraastracontrol-service-account-dockercfg-dvfcd
sería 0 y el índice parasecret-astracontrol-service-account
sería 1. En la salida, anote el número de índice del secreto de la cuenta de servicio. Necesitará este número de índice en el siguiente paso. -
Genere la kubeconfig de la siguiente manera:
-
Cree un
create-kubeconfig.sh
archivo. SustituyaTOKEN_INDEX
al principio de la secuencia de comandos siguiente con el valor correcto.create-kubeconfig.sh
# Update these to match your environment. # Replace TOKEN_INDEX with the correct value # from the output in the previous step. If you # didn't change anything else above, don't change # anything else here. SERVICE_ACCOUNT_NAME=astracontrol-service-account NAMESPACE=default NEW_CONTEXT=astracontrol KUBECONFIG_FILE='kubeconfig-sa' CONTEXT=$(kubectl config current-context) SECRET_NAME=$(kubectl get serviceaccount ${SERVICE_ACCOUNT_NAME} \ --context ${CONTEXT} \ --namespace ${NAMESPACE} \ -o jsonpath='{.secrets[TOKEN_INDEX].name}') TOKEN_DATA=$(kubectl get secret ${SECRET_NAME} \ --context ${CONTEXT} \ --namespace ${NAMESPACE} \ -o jsonpath='{.data.token}') TOKEN=$(echo ${TOKEN_DATA} | base64 -d) # Create dedicated kubeconfig # Create a full copy kubectl config view --raw > ${KUBECONFIG_FILE}.full.tmp # Switch working context to correct context kubectl --kubeconfig ${KUBECONFIG_FILE}.full.tmp config use-context ${CONTEXT} # Minify kubectl --kubeconfig ${KUBECONFIG_FILE}.full.tmp \ config view --flatten --minify > ${KUBECONFIG_FILE}.tmp # Rename context kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ rename-context ${CONTEXT} ${NEW_CONTEXT} # Create token user kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ set-credentials ${CONTEXT}-${NAMESPACE}-token-user \ --token ${TOKEN} # Set context to use token user kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ set-context ${NEW_CONTEXT} --user ${CONTEXT}-${NAMESPACE}-token-user # Set context to correct namespace kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ set-context ${NEW_CONTEXT} --namespace ${NAMESPACE} # Flatten/minify kubeconfig kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ view --flatten --minify > ${KUBECONFIG_FILE} # Remove tmp rm ${KUBECONFIG_FILE}.full.tmp rm ${KUBECONFIG_FILE}.tmp
-
Origen de los comandos para aplicarlos al clúster de Kubernetes.
source create-kubeconfig.sh
-
-
(Opcional) cambie el nombre de la Marca de prestigio por un nombre significativo para el clúster.
mv kubeconfig-sa YOUR_CLUSTER_NAME_kubeconfig
Cree un archivo kubeconfig para otros tipos de clusters
Siga estas instrucciones para crear un archivo kubeconfig de rol limitado o ampliado para Rancher, upstream Kubernetes y Red Hat OpenShift clusters.
Para los clústeres que se gestionan mediante kubeconfig, opcionalmente puede crear un rol de administrador de permisos limitado o de permisos ampliados para Astra Control Service.
Este procedimiento le ayuda a crear un kubeconfig independiente si cualquiera de los siguientes escenarios se aplica a su entorno:
-
Deseas limitar los permisos de Astra Control a los clústeres que gestiona
-
Usas varios contextos y no puedes usar el comando predeterminado de Astra Control configurado durante la instalación o un rol limitado con un solo contexto no funcionará en tu entorno
Asegúrese de que tiene lo siguiente para el clúster que tiene intención de administrar antes de completar los pasos del procedimiento:
-
A. "versión compatible" de kubectl está instalado.
-
Acceso kubectl al clúster que pretendes añadir y gestionar mediante Astra Control Service
Para este procedimiento, no necesita acceso kubectl al clúster que ejecuta Astra Control Service. -
Una imagen de referencia activa para el clúster que pretende gestionar con derechos de administrador del clúster para el contexto activo
-
Cree una cuenta de servicio:
-
Cree un archivo de cuenta de servicio llamado
astracontrol-service-account.yaml
.astracontrol-service-account.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: astracontrol-service-account namespace: default
-
Aplicar la cuenta de servicio:
kubectl apply -f astracontrol-service-account.yaml
-
-
Cree uno de los siguientes roles de clúster con permisos suficientes para que Astra Control gestione un clúster:
Rol de clúster limitadoEste rol contiene los permisos mínimos necesarios para que Astra Control gestione un clúster:
-
Cree un
ClusterRole
archivo llamado, por ejemplo,astra-admin-account.yaml
.astra-admin-account.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: astra-admin-account rules: # Get, List, Create, and Update all resources # Necessary to backup and restore all resources in an app - apiGroups: - '*' resources: - '*' verbs: - get - list - create - patch # Delete Resources # Necessary for in-place restore and AppMirror failover - apiGroups: - "" - apps - autoscaling - batch - crd.projectcalico.org - extensions - networking.k8s.io - policy - rbac.authorization.k8s.io - snapshot.storage.k8s.io - trident.netapp.io resources: - configmaps - cronjobs - daemonsets - deployments - horizontalpodautoscalers - ingresses - jobs - namespaces - networkpolicies - persistentvolumeclaims - poddisruptionbudgets - pods - podtemplates - replicasets - replicationcontrollers - replicationcontrollers/scale - rolebindings - roles - secrets - serviceaccounts - services - statefulsets - tridentmirrorrelationships - tridentsnapshotinfos - volumesnapshots - volumesnapshotcontents verbs: - delete # Watch resources # Necessary to monitor progress - apiGroups: - "" resources: - pods - replicationcontrollers - replicationcontrollers/scale verbs: - watch # Update resources - apiGroups: - "" - build.openshift.io - image.openshift.io resources: - builds/details - replicationcontrollers - replicationcontrollers/scale - imagestreams/layers - imagestreamtags - imagetags verbs: - update
-
(Solo para clústeres de OpenShift) Añada lo siguiente al final del
astra-admin-account.yaml
archivo:# OpenShift security - apiGroups: - security.openshift.io resources: - securitycontextconstraints verbs: - use - update
-
Aplique el rol de clúster:
kubectl apply -f astra-admin-account.yaml
Rol del clúster ampliadoEste rol contiene permisos ampliados para que un clúster lo gestione Astra Control. Puedes usar este rol si utilizas varios contextos y no puedes utilizar el comando kubeconfig predeterminado de Astra Control configurado durante la instalación o un rol limitado con un único contexto no funcionará en tu entorno:
Lo siguiente ClusterRole
Los pasos son un ejemplo general de Kubernetes. Consulte la documentación de la distribución de Kubernetes para obtener instrucciones específicas de su entorno.-
Cree un
ClusterRole
archivo llamado, por ejemplo,astra-admin-account.yaml
.astra-admin-account.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: astra-admin-account rules: - apiGroups: - '*' resources: - '*' verbs: - '*' - nonResourceURLs: - '*' verbs: - '*'
-
Aplique el rol de clúster:
kubectl apply -f astra-admin-account.yaml
-
-
Cree el enlace de rol de clúster para el rol del clúster a la cuenta de servicio:
-
Cree un
ClusterRoleBinding
archivo llamadoastracontrol-clusterrolebinding.yaml
.astracontrol-clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: astracontrol-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: astra-admin-account subjects: - kind: ServiceAccount name: astracontrol-service-account namespace: default
-
Aplique el enlace de roles del clúster:
kubectl apply -f astracontrol-clusterrolebinding.yaml
-
-
Crear y aplicar el secreto de token:
-
Cree un archivo secreto de token llamado
secret-astracontrol-service-account.yaml
.secret-astracontrol-service-account.yaml
apiVersion: v1 kind: Secret metadata: name: secret-astracontrol-service-account namespace: default annotations: kubernetes.io/service-account.name: "astracontrol-service-account" type: kubernetes.io/service-account-token
-
Aplique el secreto de token:
kubectl apply -f secret-astracontrol-service-account.yaml
-
-
Agregue el secreto de token a la cuenta de servicio agregando su nombre a la
secrets
array (la última línea del siguiente ejemplo):kubectl edit sa astracontrol-service-account
apiVersion: v1 imagePullSecrets: - name: astracontrol-service-account-dockercfg-48xhx kind: ServiceAccount metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"astracontrol-service-account","namespace":"default"}} creationTimestamp: "2023-06-14T15:25:45Z" name: astracontrol-service-account namespace: default resourceVersion: "2767069" uid: 2ce068c4-810e-4a96-ada3-49cbf9ec3f89 secrets: - name: astracontrol-service-account-dockercfg-48xhx - name: secret-astracontrol-service-account
-
Enumere los secretos de la cuenta de servicio, reemplazando
<context>
con el contexto correcto para su instalación:kubectl get serviceaccount astracontrol-service-account --context <context> --namespace default -o json
El final de la salida debe ser similar a lo siguiente:
"secrets": [ { "name": "astracontrol-service-account-dockercfg-48xhx"}, { "name": "secret-astracontrol-service-account"} ]
Los índices de cada elemento de la
secrets
la matriz comienza con 0. En el ejemplo anterior, el índice paraastracontrol-service-account-dockercfg-48xhx
sería 0 y el índice parasecret-astracontrol-service-account
sería 1. En la salida, anote el número de índice del secreto de la cuenta de servicio. Necesitará este número de índice en el siguiente paso. -
Genere la kubeconfig de la siguiente manera:
-
Cree un
create-kubeconfig.sh
archivo. -
Sustituya
TOKEN_INDEX
al principio de la secuencia de comandos siguiente con el valor correcto.create-kubeconfig.sh
# Update these to match your environment. # Replace TOKEN_INDEX with the correct value # from the output in the previous step. If you # didn't change anything else above, don't change # anything else here. SERVICE_ACCOUNT_NAME=astracontrol-service-account NAMESPACE=default NEW_CONTEXT=astracontrol KUBECONFIG_FILE='kubeconfig-sa' CONTEXT=$(kubectl config current-context) SECRET_NAME=$(kubectl get serviceaccount ${SERVICE_ACCOUNT_NAME} \ --context ${CONTEXT} \ --namespace ${NAMESPACE} \ -o jsonpath='{.secrets[TOKEN_INDEX].name}') TOKEN_DATA=$(kubectl get secret ${SECRET_NAME} \ --context ${CONTEXT} \ --namespace ${NAMESPACE} \ -o jsonpath='{.data.token}') TOKEN=$(echo ${TOKEN_DATA} | base64 -d) # Create dedicated kubeconfig # Create a full copy kubectl config view --raw > ${KUBECONFIG_FILE}.full.tmp # Switch working context to correct context kubectl --kubeconfig ${KUBECONFIG_FILE}.full.tmp config use-context ${CONTEXT} # Minify kubectl --kubeconfig ${KUBECONFIG_FILE}.full.tmp \ config view --flatten --minify > ${KUBECONFIG_FILE}.tmp # Rename context kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ rename-context ${CONTEXT} ${NEW_CONTEXT} # Create token user kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ set-credentials ${CONTEXT}-${NAMESPACE}-token-user \ --token ${TOKEN} # Set context to use token user kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ set-context ${NEW_CONTEXT} --user ${CONTEXT}-${NAMESPACE}-token-user # Set context to correct namespace kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ set-context ${NEW_CONTEXT} --namespace ${NAMESPACE} # Flatten/minify kubeconfig kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \ view --flatten --minify > ${KUBECONFIG_FILE} # Remove tmp rm ${KUBECONFIG_FILE}.full.tmp rm ${KUBECONFIG_FILE}.tmp
-
Origen de los comandos para aplicarlos al clúster de Kubernetes.
source create-kubeconfig.sh
-
-
(Opcional) cambie el nombre de la Marca de prestigio por un nombre significativo para el clúster.
mv kubeconfig-sa YOUR_CLUSTER_NAME_kubeconfig