Когда я создаю кластер GKE с маршрутом через NAT, я не могу получить образ докера из-за проблем с разрешениями - PullRequest
0 голосов
/ 13 ноября 2018

Я могу создать обычный кластер GKE, получить нужный образ докера и запустить его.Когда я создаю кластер GKE с правилом маршрутизации через NAT, у моего пользователя больше нет разрешения извлекать образ докера.

Я запускаю кластер со следующими настройками:

resources:
######## Network ############
- name: gke-nat-network
  type: compute.v1.network
   properties: 
    autoCreateSubnetworks: false
######### Subnets ##########
######### For Cluster #########
- name: gke-cluster-subnet 
  type: compute.v1.subnetwork
   properties:
    network: $(ref.gke-nat-network.selfLink)
     ipCidrRange: 172.16.0.0/12
     region: us-east1
 ########## NAT Subnet ##########
 - name: nat-subnet
  type: compute.v1.subnetwork
   properties: 
    network: $(ref.gke-nat-network.selfLink)
    ipCidrRange: 10.1.1.0/24
    region: us-east1
########## NAT VM ##########
- name: nat-vm
  type: compute.v1.instance 
   properties:
    zone: us-east1-b
    canIpForward: true
    tags:
      items:
      - nat-to-internet
    machineType: https://www.googleapis.com/compute/v1/projects/{{ 
env["project"] }}/zones/us-east1-b/machineTypes/f1-micro
    disks:
      - deviceName: boot
        type: PERSISTENT
        boot: true
        autoDelete: true
        initializeParams:
          sourceImage: 
https://www.googleapis.com/compute/v1/projects/debian- 
cloud/global/images/debian-7-wheezy-v20150423
     networkInterfaces:
     - network: projects/{{ env["project"] }}/global/networks/gke-nat- 
 network
      subnetwork: $(ref.nat-subnet.selfLink)
       accessConfigs:
       - name: External NAT
         type: ONE_TO_ONE_NAT
     metadata:
       items:
       - key: startup-script
        value: |
          #!/bin/sh
          # --
          # ---------------------------
          # Install TCP DUMP
          # Start nat; start dump
          # ---------------------------
          apt-get update
          apt-get install -y tcpdump
          apt-get install -y tcpick 
          iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
          nohup tcpdump -e -l -i eth0 -w /tmp/nat.pcap &
          nohup tcpdump -e -l -i eth0 > /tmp/nat.txt &
          echo 1 | tee /proc/sys/net/ipv4/ip_forward
 ########## FIREWALL RULES FOR NAT VM ##########
 - name: nat-vm-firewall 
   type: compute.v1.firewall
   properties: 
    allowed:
    - IPProtocol : tcp
      ports: []
    sourceTags: 
    - route-through-nat
    network: $(ref.gke-nat-network.selfLink)
 - name: nat-vm-ssh
  type: compute.v1.firewall
  properties: 
    allowed:
     - IPProtocol : tcp
       ports: [22]
     sourceRanges: 
    - 0.0.0.0/0
    network: $(ref.gke-nat-network.selfLink)
 ########## GKE CLUSTER CREATION ##########
 - name: nat-gke-cluster
   type: container.v1.cluster
   metadata: 
   dependsOn:
   - gke-nat-network 
   - gke-cluster-subnet
   properties: 
    cluster: 
      name: nat-gke-cluster 
      initialNodeCount: 1
      network: gke-nat-network
      subnetwork: gke-cluster-subnet
      nodeConfig:
        machineType: n1-standard-4
        tags:
        - route-through-nat
    zone: us-east1-b
########## GKE MASTER ROUTE ##########
- name: master-route
  type: compute.v1.route
  properties:
    destRange: $(ref.nat-gke-cluster.endpoint)
    network: $(ref.gke-nat-network.selfLink)
    nextHopGateway: projects/{{ env["project"] 
}}/global/gateways/default-internet-gateway
    priority: 100
    tags:
    - route-through-nat
########## NAT ROUTE ##########
 - name: gke-cluster-route-through-nat
  metadata: 
    dependsOn:
    - nat-gke-cluster  
    - gke-nat-network
   type: compute.v1.route
   properties: 
    network: $(ref.gke-nat-network.selfLink)
     destRange: 0.0.0.0/0
     description: "route all other traffic through nat"
     nextHopInstance: $(ref.nat-vm.selfLink)
    tags:
    - route-through-nat
    priority: 800

Когда япопробуйте вытащить и запустить образ докера, который я получаю:

Ошибка ImagePullBackOff Google Kubernetes Engine

Когда я делаю kubectl описать модуль, я получаю:

Не удалось получить изображение: ошибка rpc: code = Unknown desc = неавторизовано: требуется аутентификация

Редактировать:

Я обнаружил, что консольная команда gcloud изменилась с v1.10 https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes

Как правило, определенные роли по умолчанию не разрешены для этих кластеров, включая извлечение изображения из хранилища Google.

У меня все еще не получается понять, как назначить эти роли при использовании

При развертывании менеджера развертывания gcloud создается gke-with-nat --config gke-with-nat-route.yml

1 Ответ

0 голосов
/ 20 ноября 2018

Таким образом, причина того, что образы контейнеров не вытягивались, заключается в том, что кластеры gcloud изменили способ обработки разрешений.Он использовался для предоставления роли «хранилище-ro» новым кластерам, позволяя им извлекать образы контейнеров из реестра контейнеров.В соответствии с https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes.

мне пришлось добавить области к развертыванию кластера YML, когда я создаю свое развертывание с использованием

развертываний менеджера развертывания gcloud и создаю gke-with-nat --config gke-with-nat-route.yml

Новый YML включает эти параметры

nodeConfig:
    serviceAccount: thisuser@project-id.iam.gserviceaccount.com
    oauthScopes:
      - https://www.googleapis.com/auth/devstorage.read_only

Если вы используете создание кластера, я думаю, что вы можете использовать

кластеры контейнеров gcloud создают пример кластера --scopes scope1, scope2

Если вы используете пользовательский интерфейс веб-сайта, я думаю, что вы можете использовать устаревшие настройки, установив флажок впользовательский интерфейс.Я не уверен, как долго это будет поддерживаться.

...