# #google-kubernetes-engine #google-container-registry
Вопрос:
Запущено gcloud container clusters describe [CLUSTER NAME]
: области, перечисленные в свойстве oauthScopes, не включают https://www.googleapis.com/auth/devstorage.read_only, но мне это нужно, чтобы извлечь мое личное изображение из реестра контейнеров.
Как добавить в область проверки подлинности
Изменить: Я автоматизирую свое развертывание с помощью сборников игр Ansible
Комментарии:
1. Используете ли вы учетную запись по умолчанию или пользовательскую учетную запись службы для GKE?
2. Вы можете попробовать обновить кластер GKE, создав новый пул узлов с новыми областями действия, как указано в пункте 2 в ответе.
Ответ №1:
Как правило, для большинства учетных записей облачных служб Google настройка доступа к реестру требует только предоставления соответствующих разрешений IAM.
1. Механизм Google Kubernetes использует учетную запись службы, настроенную на экземплярах виртуальных машин узлов кластера, для отправки и извлечения изображений. Вы должны предоставить учетной записи службы соответствующие разрешения для доступа к хранилищу, используемому реестром контейнеров. Вы можете найти соответствующие разрешения в документации. Минимальное разрешение для загрузки изображений с GCR-это «Средство просмотра хранилища».
2. Если ваш движок Google Kubernetes использует учетную запись службы по умолчанию, вам необходимо дополнительно настроить область доступа к хранилищу. Чтобы извлекать только частные образы Docker, экземпляру виртуальной машины требуется область доступа к хранилищу только для чтения.
Чтобы обновить область доступа к кластеру GKE для добавления новых областей, мы можем просто создать новый пул узлов с новыми областями, как это:
gcloud container node-pools create ADJUSTED-SCOPES
--cluster <YOUR_CLUSTER_NAME> --zone <YOUR_ZONE>
--num-nodes 3
--scopes https://www.googleapis.com/auth/devstorage.read_only
Если вы хотите добавить несколько областей. Его можно указать, разделив запятыми. Например:
gcloud container node-pools create ADJUSTED-SCOPES
--cluster <YOUR_CLUSTER_NAME> --zone <YOUR_ZONE>
--num-nodes 3
--scopes https://www.googleapis.com/auth/devstorage.read_write,https://www.googleapis.com/WHAT_YOU_NEED
3. Если вы хотите использовать устаревшие области доступа в кластерах под управлением Kubernetes версии 1.10 и выше, необходимо добавить области вручную при создании кластера. Обратитесь к миграции из устаревших областей доступа.
Дополнительные сведения см. в разделе необходимые разрешения и области обновления виртуальных машин Google kubernetes.
Ответ №2:
Согласно облачным документам Google о привязке учетной записи службы к экземпляру
При создании экземпляра с помощью средства командной строки gcloud или консоли Google Cloud можно указать, какую учетную запись службы использует экземпляр при вызове облачных API Google. Экземпляр автоматически настраивается со следующими областями доступа:
- Доступ только для чтения к Облачному хранилищу: https://www.googleapis.com/auth/devstorage.read_only
- Доступ на запись для записи журналов вычислительного движка:
- Доступ на запись для публикации данных показателей в ваших проектах Google Cloud: https://www.googleapis.com/auth/monitoring.write
- Доступ только для чтения к функциям управления службами, необходимым для конечных точек Google Cloud(Альфа): https://www.googleapis.com/auth/service.management.readonly
- Доступ на чтение и запись к функциям управления службами, необходимым для конечных точек Google Cloud(Альфа):
Облачное хранилище-это разрешение, которое мне нужно, поэтому ожидается, что оно будет включено по умолчанию, но следует отметить, что вышесказанное применимо при создании экземпляра с помощью средства командной строки gcloud или консоли Google Cloud
В моем случае я создавал свой экземпляр, используя Ansible playbook. google.cloud.gcp_container_node_pool
какой модуль я использую при создании пула узлов, принимает несколько параметров, которые включают config
в себя то oauth_scopes
, что:
Набор областей API Google, которые будут доступны на всех виртуальных машинах узла под учетной записью службы «по умолчанию». Следующие области рекомендуется, но не обязательно, и по умолчанию не включены: https://www.googleapis.com/auth/compute требуется для подключения постоянного хранилища на узлах. https://www.googleapis.com/auth/devstorage.read_only требуется для связи с gcr.io (Реестр контейнеров Google). Если не указано, области не добавляются, если не включено ведение журнала в облаке или Мониторинг облака, и в этом случае будут добавлены требуемые области.
Это означает, что в отличие от использования инструмента командной строки или облачной консоли, при создании пула узлов с помощью модуля Ansible области по умолчанию не добавляются. За исключением областей ведения облачного журнала и мониторинга, которые всегда добавляются, если они включены для вашего проекта.
Чтобы исправить это,я включил список oath_scopes
того, что я хотел бы включить:
- name: create k8s node pool
google.cloud.gcp_container_node_pool:
name: "node-pool-{{ cluster_name }}"
initial_node_count: "{{ initial_node_count }}"
cluster: "{{ cluster }}"
config:
disk_size_gb: "{{ disk_size_gb }}"
disk_type: "{{ disk_type }}"
machine_type: "{{ machine_type }}"
oauth_scopes:
- https://www.googleapis.com/auth/devstorage.read_only
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring.write
location: "{{ zone }}"
project: "{{ project_id }}"
auth_kind: serviceaccount
service_account_file: "{{ credentials_file }}"
state: present
Когда вы снова запустите учебник, пул узлов будет воссоздан, на этот раз с указанными вами областями.