Skip to main content
すべてのクラウドプロバイダ
  • Amazon Web Services の
  • Google Cloud
  • Microsoft Azure
  • すべてのクラウドプロバイダ
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

kubeconfigファイルを作成します

共同作成者

kubeconfigファイルを使用して、Astra Control Serviceにクラスタを追加できます。追加するクラスタのタイプによっては、特定の手順を使用してクラスタ用のkubeconfigファイルを手動で作成しなければならない場合があります。

Amazon EKSクラスタ用のkubeconfigファイルを作成します

以下の手順に従って、Amazon EKSクラスタ用のkubeconfigファイルと永続的トークンシークレットを作成します。EKSでホストされるクラスタには、永続的なトークンシークレットが必要です。

手順
  1. Amazonのドキュメントの手順に従って、kubeconfigファイルを生成します。

  2. 次の手順でサービスアカウントを作成します。

    1. という名前のサービスアカウントファイルを作成します astracontrol-service-account.yaml

      必要に応じてサービスアカウント名を調整します。ネームスペース kube-system これらの手順では必須です。ここでサービスアカウント名を変更する場合は、次の手順で同じ変更を適用する必要があります。

    astracontrol-service-account.yaml

    +

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: astra-admin-account
      namespace: kube-system
  3. サービスアカウントを適用します。

    kubectl apply -f astracontrol-service-account.yaml
  4. を作成します ClusterRoleBinding という名前のファイルです astracontrol-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
  5. クラスタロールバインドを適用します。

    kubectl apply -f astracontrol-clusterrolebinding.yaml
  6. という名前のサービスアカウントトークンシークレットファイルを作成します 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
  7. トークンシークレットを適用します。

    kubectl apply -f astracontrol-secret.yaml
  8. トークンシークレットを取得します。

    kubectl get secret astra-admin-account -n kube-system -o jsonpath='{.data.token}' | base64 -d
  9. を交換します user 次の例に示すように、AWS EKS kubeconfigファイルのセクションでトークンを指定します。

    user:
        token: k8s-aws-v1.aHR0cHM6Ly9zdHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1HZXRDYWxsZXJJZGVudGl0eSZWZXJzaW9uPTIwMTEtMDYtMTUmWC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBM1JEWDdKU0haWU9LSEQ2SyUyRjIwMjMwNDAzJTJGdXMtd2VzdC0yJTJGc3RzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyMzA0MDNUMjA0MzQwWiZYLUFtei1FeHBpcmVzPTYwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCUzQngtazhzLWF3cy1pZCZYLUFtei1TaWduYXR1cmU9YjU4ZWM0NzdiM2NkZGYxNGRhNzU4MGI2ZWQ2zY2NzI2YWIwM2UyNThjMjRhNTJjNmVhNjc4MTRlNjJkOTg2Mg

Red Hat OpenShift Service on AWS(ROSA)クラスタ用のkubeconfigファイルを作成する

次の手順に従って、Red Hat OpenShift Service on AWS(ROSA)クラスタ用のkubeconfigファイルを作成します。

手順
  1. ROSAクラスタにログインします。

  2. サービスアカウントを作成します。

    oc create sa astracontrol-service-account
  3. クラスタロールを追加します。

    oc adm policy add-cluster-role-to-user cluster-admin -z astracontrol-service-account
  4. 次の例を使用して、サービスアカウントシークレットコンフィギュレーションファイルを作成します。

    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
  5. シークレットを作成します。

    oc create -f secret-astra-sa.yaml
  6. 作成したサービスアカウントを編集し、Astra Controlサービスアカウントのシークレット名を secrets セクション。

    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####
  7. サービスアカウントのシークレットを一覧表示します(置き換えます) <CONTEXT> インストールに適したコンテキストを使用して、次の操作を行います。

    kubectl get serviceaccount astracontrol-service-account --context <CONTEXT> --namespace default -o json

    出力の末尾は次のようになります。

    "secrets": [
    { "name": "astracontrol-service-account-dockercfg-dvfcd"},
    { "name": "secret-astracontrol-service-account"}
    ]

    内の各要素のインデックス secrets アレイは0から始まります。上記の例では、のインデックスです astracontrol-service-account-dockercfg-dvfcd は0、のインデックスです secret-astracontrol-service-account は1です。出力で、サービスアカウントシークレットのインデックス番号をメモします。このインデックス番号は次の手順で必要になります。

  8. 次のように kubeconfig を生成します。

    1. を作成します create-kubeconfig.sh ファイル。交換してください TOKEN_INDEX 次のスクリプトの先頭に正しい値を入力します。

      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
    2. コマンドをソースにし、 Kubernetes クラスタに適用します。

      source create-kubeconfig.sh
  9. (オプション)クラスタにわかりやすい名前にコバーベキューの名前を変更します。

    mv kubeconfig-sa YOUR_CLUSTER_NAME_kubeconfig

他のタイプのクラスタ用にkubeconfigファイルを作成します

以下の手順に従って、Rancher、Upstream Kubernetes、およびRed Hat OpenShiftクラスタ用に、制限付きまたは拡張されたロールkubeconfigファイルを作成します。

kubeconfigを使用して管理されるクラスタについては、必要に応じて、Astra Control Service用の制限された権限または拡張された権限管理者ロールを作成できます。

この手順を使用すると、次のいずれかのシナリオで環境を環境化する場合に、別のkubeconfigを作成できます。

  • 管理対象のクラスタに対するAstra Controlの権限を制限する

  • 複数のコンテキストを使用し、インストール時に設定されたデフォルトのAstra Control kubeconfigは使用できません。また、単一のコンテキストを持つ限定されたロールは環境では機能しません。

作業を開始する前に

手順 の手順を実行する前に、管理するクラスタに次の情報があることを確認してください。

  • A "サポートされているバージョン" のkubectlがインストールされています。

  • Astra Control Serviceを使用して追加および管理するクラスタへのkubectlアクセス

    メモ この手順では、Astra Controlサービスを実行しているクラスタへのkubectlアクセスは必要ありません。
  • アクティブなコンテキストのクラスタ管理者の権限で管理するクラスタのアクティブなkubeconfigです

手順
  1. サービスアカウントを作成します。

    1. という名前のサービスアカウントファイルを作成します astracontrol-service-account.yaml

      astracontrol-service-account.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: astracontrol-service-account
        namespace: default
    2. サービスアカウントを適用します。

      kubectl apply -f astracontrol-service-account.yaml
  2. 次のいずれかのクラスタロールを作成し、Astra Controlで管理するクラスタに必要な権限を割り当てます。

    クラスタロールの制限

    このロールには、Astra Controlでクラスタを管理するために必要な最小限の権限が含まれています。

    1. を作成します ClusterRole という名前のファイル。例: 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
    2. (OpenShiftクラスタの場合のみ) astra-admin-account.yaml ファイル:

      # OpenShift security
      - apiGroups:
        - security.openshift.io
        resources:
        - securitycontextconstraints
        verbs:
        - use
        - update
    3. クラスタロールを適用します。

      kubectl apply -f astra-admin-account.yaml
    クラスタロールの拡張

    このロールには、Astra Controlで管理するクラスタに対する権限が拡張されています。このロールは、複数のコンテキストを使用し、インストール時に設定されたデフォルトのAstra Control kubeconfigを使用できない場合や、単一のコンテキストを持つ限定されたロールが環境で機能しない場合に使用できます。

    メモ 次のようになります ClusterRole 手順はKubernetesの一般的な例です。ご使用の環境に固有の手順については、ご使用のKubernetesディストリビューションのドキュメントを参照してください。
    1. を作成します ClusterRole という名前のファイル。例: 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:
        - '*'
    2. クラスタロールを適用します。

      kubectl apply -f astra-admin-account.yaml
  3. サービスアカウントへのクラスタロールバインド用に、クラスタロールを作成します。

    1. を作成します ClusterRoleBinding という名前のファイルです astracontrol-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
    2. クラスタロールバインドを適用します。

      kubectl apply -f astracontrol-clusterrolebinding.yaml
  4. トークンシークレットを作成して適用します。

    1. という名前のトークンシークレットファイルを作成します。 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
    2. トークンシークレットを適用します。

      kubectl apply -f secret-astracontrol-service-account.yaml
  5. トークンシークレットの名前を secrets Array(次の例の最後の行):

    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
  6. サービスアカウントのシークレットを一覧表示します(置き換えます) <context> インストールに適したコンテキストを使用して、次の操作を行います。

    kubectl get serviceaccount astracontrol-service-account --context <context> --namespace default -o json

    出力の末尾は次のようになります。

    "secrets": [
    { "name": "astracontrol-service-account-dockercfg-48xhx"},
    { "name": "secret-astracontrol-service-account"}
    ]

    内の各要素のインデックス secrets アレイは0から始まります。上記の例では、のインデックスです astracontrol-service-account-dockercfg-48xhx は0、のインデックスです secret-astracontrol-service-account は1です。出力で、サービスアカウントシークレットのインデックス番号をメモします。このインデックス番号は次の手順で必要になります。

  7. 次のように kubeconfig を生成します。

    1. を作成します create-kubeconfig.sh ファイル。

    2. 交換してください TOKEN_INDEX 次のスクリプトの先頭に正しい値を入力します。

      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
    3. コマンドをソースにし、 Kubernetes クラスタに適用します。

      source create-kubeconfig.sh
  8. (オプション)クラスタにわかりやすい名前にコバーベキューの名前を変更します。

    mv kubeconfig-sa YOUR_CLUSTER_NAME_kubeconfig