>

GKE와 terraform을 사용하여 고 가용성 kubernetes 클러스터를 구성하고 있습니다. 여러 팀이 클러스터에서 여러 배포를 실행하며 대부분 격리는 주로 격리 이유로 인해 사용자 지정 네임 스페이스에있을 것으로 예상됩니다.

개방형 질문 중 하나는 클러스터에서 GCP 서비스 계정을 관리하는 방법입니다.

맞춤형 GCP 서비스 계정으로 클러스터를 만들고 권한을 조정하여 GCR에서 이미지를 가져올 수 있고, 스택 드라이버 등으로 로그를 가져올 수 있습니다.이 맞춤형 서비스 계정은 GKE 노드 대신 GKE 노드에서 사용됩니다 기본 계산 엔진 서비스 계정. 내가 이쪽에서 틀렸다면 정정 해주세요!

각 배포마다 다른 GCP 리소스 세트 (클라우드 스토리지, 데이터 저장소, 클라우드 SQL 등)에 액세스해야하며 각 배포마다 고유 한 GCP 서비스 계정을 갖고 있기 때문에 권한을 제어 할 수 있습니다. 포드를 실행하는 노드에서 사용할 수있는 GCP 서비스 계정에 액세스 할 수 없도록 포드를 실행하고 싶습니다.

가능합니까?

일부 옵션을 고려했지만 타당성 또는 바람직함에 확신이 없습니다 :

<올>
  • 배포를위한 GCP 서비스 계정을 kubernetes 시크릿으로 클러스터에 추가하고, 배포시 파일로 마운트하고 GOOGLE_DEFAULT_CREDENTAILS 를 설정할 수 있습니다.  그것을 가리키다
  • 인스턴스의 메타 데이터 API에 대한 액세스가 포드에 대해 거부되었거나 메타 데이터 API가 반환 한 서비스 계정을 변경할 수 있습니까?
  • 포드에 표시되는 서비스 계정을 제어하는 ​​GKE (또는 kubernetes) 기본 방법이 있습니까?

    • 답변 # 1

      당신은 올바른 길을 가고 있습니다. GCP 서비스 계정을 GKE에서 POD가 GCP 리소스에 권한을 할당하는 데 사용할 수 있습니다.

      계정 만들기 :

      cloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
      
      

      서비스 계정에 IAM 권한 추가 :

      gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role='roles/${ROLE_ID}'
      
      

      서비스 계정을위한 JSON 파일 생성 :

      gcloud iam service-accounts keys create \
        --iam-account "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
        service-account.json
      
      

      해당 JSON으로 비밀을 만드십시오 :

      kubectl create secret generic echo --from-file service-account.json
      
      

      그 비밀을 사용하여 애플리케이션을위한 배포를 생성하십시오 :

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: echo
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: echo
        template:
          metadata:
            name: echo
          spec:
            containers:
              - name: echo
                image: "gcr.io/hightowerlabs/echo"
                env:
                  - name: "GOOGLE_APPLICATION_CREDENTIALS"
                    value: "/var/run/secret/cloud.google.com/service-account.json"
                  - name: "PROJECT_ID"
                    valueFrom:
                      configMapKeyRef:
                        name: echo
                        key: project-id
                  - name: "TOPIC"
                    value: "echo"
                volumeMounts:
                  - name: "service-account"
                    mountPath: "/var/run/secret/cloud.google.com"
            volumes:
              - name: "service-account"
                secret:
                  secretName: "echo"
      
      

      별도의 배포에 다양한 권한을 사용하려면 권한이 다른 일부 GCP 서비스 계정을 생성하고 이에 대한 JSON 토큰을 생성 한 후 계획에 따라 배포에 할당해야합니다. 포드는 노드에 할당 된 계정을 서비스하지 않고 마운트 된 서비스 계정에 따라 액세스 할 수 있습니다.

      자세한 내용은 다음 링크를 참조하십시오.

      서비스 계정으로 클라우드 플랫폼에 인증

      GKE (Google Container Engine)를 사용한 Google 클라우드 서비스 계정-자습서

    관련 자료

  • 이전 ios - 화면을 깔끔하게 탐색하려면 어떻게해야합니까?
  • 다음 python - 더 pythonic은 무엇입니까 - 사소한 람다 또는 없음?