Как добавить область доступа к пулу узлов конфигурации GKE

# #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. Экземпляр автоматически настраивается со следующими областями доступа:

Облачное хранилище-это разрешение, которое мне нужно, поэтому ожидается, что оно будет включено по умолчанию, но следует отметить, что вышесказанное применимо при создании экземпляра с помощью средства командной строки 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
 

Когда вы снова запустите учебник, пул узлов будет воссоздан, на этот раз с указанными вами областями.