В течение нескольких месяцев мы работали над созданием внутренней сети для всех наших проектов в Google Cloud с помощью SharedVPC, и мы не столкнулись с какими-либо проблемами при настройке вычислительных экземпляров в различных подсетях, назначенных каждому проекту.
Однако проблема возникла, когда мы пытаемся создать кластер Kubernetes. По какой-то причине, когда мы пытаемся это сделать, мы получаем следующую ошибку:
Ошибка 403: Google Compute Engine: требуется разрешение «compute.networks.get» для «projects / host-project / global / networks / subnet-required»
Я проверил, есть ли все необходимые разрешения, как описано в Google GKE с использованием SharedVPC пример документации, и даже повторно включил API-интерфейсы и с нуля настроил разрешения, предложенные в документации. Тем не менее, похоже, что проблема не исчезла.
Команда, используемая для попытки развернуть кластер:
gcloud container clusters create test \
--project <target-project> \
--zone=us-east1-c \
--enable-ip-alias \
--network projects/<host-project>/global/networks/<vpc-network> \
--subnetwork projects/<host-project>/regions/us-east1/subnetworks/<subnet-required> \
--cluster-secondary-range-name k8s-cluster-range \
--services-secondary-range-name k8s-services-range
Учетным записям служб Container Engine и Compute Engine API были предоставлены роли / compute.networkUser и роли / container.hostServiceAgentUser, как указано в документации.
Кто-нибудь нашел эту проблему или знает, что может вызвать эту ошибку?
Спасибо!
Это заняло некоторое время, так как я уже несколько дней пытался найти решение этой проблемы, но, похоже, мне наконец удалось найти то, что было необходимо для работы.
я узнал что gcloud beta container subnets list-usable --project <client-project> --network-project <host-project>
отображала подсеть как доступную, но не отображала вторичные диапазоны, определенные внутри, а также отображала еще одну ошибку 403. Имея эту информацию в руках, я снова проверил API-интерфейсы, чтобы увидеть, есть ли с ними какие-либо проблемы, даже если они были отключены и включены ранее.
Кажется, что gcloud services enable container.googleapis.com --project <host-project>
, который должен был создать учетную запись службы Kubernetes Engine API, не работал должным образом и не создавал учетную запись службы.
Интересно, что когда Kubernetes Engine API был отключен из командной строки и включен снова, он также не создал учетную запись службы. В единственный способ обойти эту проблему - включить API через консоль. После этого учетная запись службы была успешно создана.
С учетной записью службы, созданной в основном проекте, учетным записям служб клиентских проектов удалось без проблем добраться до ведущего проекта.
Надеюсь, если кто-то снова обнаружит эту проблему, ему удастся найти решение здесь!