Crie um arquivo kubeconfig
Você pode adicionar um cluster ao Astra Control Service usando um arquivo kubeconfig. Dependendo do tipo de cluster que você deseja adicionar, talvez seja necessário criar manualmente um arquivo kubeconfig para o cluster usando etapas específicas.
Crie um arquivo kubeconfig para clusters do Amazon EKS
Siga estas instruções para criar um arquivo kubeconfig e um segredo de token permanente para clusters do Amazon EKS. Um segredo de token permanente é necessário para clusters hospedados no EKS.
-
Siga as instruções na documentação da Amazon para gerar um arquivo kubeconfig:
-
Crie uma conta de serviço da seguinte forma:
-
Crie um arquivo de conta de serviço
astracontrol-service-account.yaml
chamado .Ajuste o nome da conta de serviço conforme necessário. O namespace
kube-system
é necessário para estas etapas. Se você alterar o nome da conta de serviço aqui, você deve aplicar as mesmas alterações nas etapas a seguir.
astracontrol-service-account.yaml
+
apiVersion: v1 kind: ServiceAccount metadata: name: astra-admin-account namespace: kube-system
-
-
Aplique a conta de serviço:
kubectl apply -f astracontrol-service-account.yaml
-
Crie um
ClusterRoleBinding
arquivo chamadoastracontrol-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
-
Aplicar a vinculação de funções do cluster:
kubectl apply -f astracontrol-clusterrolebinding.yaml
-
Crie um arquivo secreto de token de conta de serviço
astracontrol-secret.yaml
chamado .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 o segredo do token:
kubectl apply -f astracontrol-secret.yaml
-
Recuperar o segredo do token:
kubectl get secret astra-admin-account -n kube-system -o jsonpath='{.data.token}' | base64 -d
-
Substitua a
user
seção do arquivo AWS EKS kubeconfig pelo token, como mostrado no exemplo a seguir:user: token: k8s-aws-v1.aHR0cHM6Ly9zdHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1HZXRDYWxsZXJJZGVudGl0eSZWZXJzaW9uPTIwMTEtMDYtMTUmWC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBM1JEWDdKU0haWU9LSEQ2SyUyRjIwMjMwNDAzJTJGdXMtd2VzdC0yJTJGc3RzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyMzA0MDNUMjA0MzQwWiZYLUFtei1FeHBpcmVzPTYwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCUzQngtazhzLWF3cy1pZCZYLUFtei1TaWduYXR1cmU9YjU4ZWM0NzdiM2NkZGYxNGRhNzU4MGI2ZWQ2zY2NzI2YWIwM2UyNThjMjRhNTJjNmVhNjc4MTRlNjJkOTg2Mg
Crie um arquivo kubeconfig para clusters do Red Hat OpenShift Service no AWS (Rosa)
Siga estas instruções para criar um arquivo kubeconfig para o Red Hat OpenShift Service nos clusters AWS (Rosa).
-
Faça login no cluster ROSA.
-
Criar uma conta de serviço:
oc create sa astracontrol-service-account
-
Adicionar uma função de cluster:
oc adm policy add-cluster-role-to-user cluster-admin -z astracontrol-service-account
-
Usando o exemplo a seguir, crie um arquivo de configuração secreta de conta de serviço:
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
-
Crie o segredo:
oc create -f secret-astra-sa.yaml
-
Edite a conta de serviço que você criou e adicione o nome secreto da conta de serviço Astra Control à
secrets
seção: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####
-
Liste os segredos da conta de serviço, substituindo
<CONTEXT>
pelo contexto correto para sua instalação:kubectl get serviceaccount astracontrol-service-account --context <CONTEXT> --namespace default -o json
O final da saída deve ser semelhante ao seguinte:
"secrets": [ { "name": "astracontrol-service-account-dockercfg-dvfcd"}, { "name": "secret-astracontrol-service-account"} ]
Os índices para cada elemento no
secrets
array começam com 0. No exemplo acima, o índice paraastracontrol-service-account-dockercfg-dvfcd
seria 0 e o índice parasecret-astracontrol-service-account
seria 1. Na sua saída, anote o número do índice para o segredo da conta de serviço. Você precisará deste número de índice na próxima etapa. -
Gere o kubeconfigo da seguinte forma:
-
Crie um
create-kubeconfig.sh
arquivo. SubstituaTOKEN_INDEX
no início do script a seguir pelo valor correto.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
-
Forneça os comandos para aplicá-los ao cluster do Kubernetes.
source create-kubeconfig.sh
-
-
(Opcional) Renomear o kubeconfig para um nome significativo para o cluster.
mv kubeconfig-sa YOUR_CLUSTER_NAME_kubeconfig
Crie um arquivo kubeconfig para outros tipos de clusters
Siga estas instruções para criar um arquivo kubeconfig limitado ou expandido para clusters Rancher, Upstream Kubernetes e Red Hat OpenShift.
Para clusters gerenciados usando o kubeconfig, você pode, opcionalmente, criar uma função de administrador de permissão limitada ou expandida para o Astra Control Service.
Este procedimento ajuda você a criar um kubeconfig separado se qualquer um dos seguintes cenários se aplicar ao seu ambiente:
-
Você deseja limitar as permissões do Astra Control nos clusters que ele gerencia
-
Você usa vários contextos e não pode usar o kubeconfig padrão do Astra Control configurado durante a instalação ou uma função limitada com um único contexto não funcionará em seu ambiente
Certifique-se de que tem o seguinte para o cluster que pretende gerir antes de concluir as etapas do procedimento:
-
Um "versão suportada" de kubectl está instalado.
-
Acesso kubectl ao cluster que você pretende adicionar e gerenciar com o Astra Control Service
Para esse procedimento, você não precisa do acesso do kubectl ao cluster que está executando o Astra Control Service. -
Um kubeconfig ativo para o cluster que pretende gerir com direitos de administrador de cluster para o contexto ativo
-
Criar uma conta de serviço:
-
Crie um arquivo de conta de serviço
astracontrol-service-account.yaml
chamado .astracontrol-service-account.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: astracontrol-service-account namespace: default
-
Aplique a conta de serviço:
kubectl apply -f astracontrol-service-account.yaml
-
-
Crie uma das seguintes funções de cluster com permissões suficientes para que um cluster seja gerenciado pelo Astra Control:
Função limitada do clusterEssa função contém as permissões mínimas necessárias para que um cluster seja gerenciado pelo Astra Control:
-
Crie um
ClusterRole
arquivo chamado, por exemploastra-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
-
(Somente para clusters OpenShift) Append o seguinte no final
astra-admin-account.yaml
do arquivo:# OpenShift security - apiGroups: - security.openshift.io resources: - securitycontextconstraints verbs: - use - update
-
Aplique a função de cluster:
kubectl apply -f astra-admin-account.yaml
Função expandida do clusterEssa função contém permissões expandidas para um cluster a ser gerenciado pelo Astra Control. Você pode usar essa função se você usar vários contextos e não puder usar o kubeconfig padrão do Astra Control configurado durante a instalação ou uma função limitada com um único contexto não funcionará em seu ambiente:
As etapas a seguir ClusterRole
são um exemplo geral do Kubernetes. Consulte a documentação da distribuição do Kubernetes para obter instruções específicas para o seu ambiente.-
Crie um
ClusterRole
arquivo chamado, por exemploastra-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 a função de cluster:
kubectl apply -f astra-admin-account.yaml
-
-
Crie a vinculação de função de cluster para a função de cluster à conta de serviço:
-
Crie um
ClusterRoleBinding
arquivo chamadoastracontrol-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
-
Aplicar a vinculação de funções do cluster:
kubectl apply -f astracontrol-clusterrolebinding.yaml
-
-
Crie e aplique o segredo do token:
-
Crie um arquivo secreto de token
secret-astracontrol-service-account.yaml
chamado .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 o segredo do token:
kubectl apply -f secret-astracontrol-service-account.yaml
-
-
Adicione o segredo do token à conta de serviço adicionando seu nome ao
secrets
array (a última linha no exemplo a seguir):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
-
Liste os segredos da conta de serviço, substituindo
<context>
pelo contexto correto para sua instalação:kubectl get serviceaccount astracontrol-service-account --context <context> --namespace default -o json
O final da saída deve ser semelhante ao seguinte:
"secrets": [ { "name": "astracontrol-service-account-dockercfg-48xhx"}, { "name": "secret-astracontrol-service-account"} ]
Os índices para cada elemento no
secrets
array começam com 0. No exemplo acima, o índice paraastracontrol-service-account-dockercfg-48xhx
seria 0 e o índice parasecret-astracontrol-service-account
seria 1. Na sua saída, anote o número do índice para o segredo da conta de serviço. Você precisará desse número de índice na próxima etapa. -
Gere o kubeconfigo da seguinte forma:
-
Crie um
create-kubeconfig.sh
arquivo. -
Substitua
TOKEN_INDEX
no início do script a seguir pelo valor correto.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
-
Forneça os comandos para aplicá-los ao cluster do Kubernetes.
source create-kubeconfig.sh
-
-
(Opcional) Renomear o kubeconfig para um nome significativo para o cluster.
mv kubeconfig-sa YOUR_CLUSTER_NAME_kubeconfig