Allow Fleet
Duration: 5 min | Persona: Org Admin
In this section, you will enable and grant the appropriate APIs in the Tenant project and the IAM role for the Tenant project’s service account. This will allow later this service account to provision the Fleet features.
Define variables:
WORK_DIR=~/
source ${WORK_DIR}acm-workshop-variables.shDefine role
Define the gkehub.admin role with an IAMPolicyMember for the Tenant project’s service account:
cat <<EOF > ${WORK_DIR}$HOST_PROJECT_DIR_NAME/projects/$TENANT_PROJECT_ID/gke-hub-admin.yaml
apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicyMember
metadata:
name: gke-hub-admin-${TENANT_PROJECT_ID}
namespace: config-control
annotations:
config.kubernetes.io/depends-on: iam.cnrm.cloud.google.com/namespaces/config-control/IAMServiceAccount/${TENANT_PROJECT_ID},resourcemanager.cnrm.cloud.google.com/namespaces/config-control/Project/${TENANT_PROJECT_ID}
spec:
memberFrom:
serviceAccountRef:
name: ${TENANT_PROJECT_ID}
role: roles/gkehub.admin
resourceRef:
kind: Project
external: projects/${TENANT_PROJECT_ID}
EOFDefine APIs
Define the GKE and Fleet APIs Service resources for the Tenant project:
cat <<EOF > ${WORK_DIR}$HOST_PROJECT_DIR_NAME/projects/$TENANT_PROJECT_ID/gke-hub-service.yaml
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
metadata:
annotations:
cnrm.cloud.google.com/deletion-policy: "abandon"
cnrm.cloud.google.com/disable-dependent-services: "false"
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/config-control/Project/${TENANT_PROJECT_ID}
name: ${TENANT_PROJECT_ID}-gkehub
namespace: config-control
spec:
projectRef:
name: ${TENANT_PROJECT_ID}
resourceID: gkehub.googleapis.com
EOF
cat <<EOF > ${WORK_DIR}$HOST_PROJECT_DIR_NAME/projects/$TENANT_PROJECT_ID/anthos-configmanagement-service.yaml
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
metadata:
annotations:
cnrm.cloud.google.com/deletion-policy: "abandon"
cnrm.cloud.google.com/disable-dependent-services: "false"
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/config-control/Project/${TENANT_PROJECT_ID}
name: ${TENANT_PROJECT_ID}-anthosconfigmanagement
namespace: config-control
spec:
projectRef:
name: ${TENANT_PROJECT_ID}
resourceID: anthosconfigmanagement.googleapis.com
EOFDeploy Kubernetes manifests
cd ~/$HOST_PROJECT_DIR_NAME/
git add . && git commit -m "Allow Fleet for Tenant project" && git push origin mainCheck deployments
graph TD; IAMPolicyMember-.->IAMServiceAccount IAMPolicyMember-.->Project Service-.->Project
List the Kubernetes resources managed by Config Sync in Config Controller for the Host project configs repository:
Run this command and click on this link:
echo -e "https://console.cloud.google.com/kubernetes/config_management/packages?project=${HOST_PROJECT_ID}"Wait until you see the Sync status column as Synced and the Reconcile status column as Current.
Run this command:
gcloud alpha anthos config sync repo describe \
--project $HOST_PROJECT_ID \
--managed-resources all \
--sync-name root-sync \
--sync-namespace config-management-systemWait and re-run this command above until you see "status": "SYNCED". All the managed_resources listed should have STATUS: Current too.
List the GitHub runs for the Host project configs repository:
cd ${WORK_DIR}$HOST_PROJECT_DIR_NAME && gh run listList the Google Cloud resources created:
gcloud services list \
--enabled \
--project ${TENANT_PROJECT_ID} \
| grep -E 'anthosconfigmanagement|gkehub'
gcloud projects get-iam-policy $TENANT_PROJECT_ID \
--filter="bindings.members:${TENANT_PROJECT_SA_EMAIL}" \
--flatten="bindings[].members" \
--format="table(bindings.role)" \
| grep gkehubWait and re-run this command above until you see the resources created.