GCP Cloud Run: не удалось создать службу

Я пытаюсь использовать Cloud run с частным кластером GKE. Я создал кластер, используя следующую команду:

gcloud beta container clusters create cluster-name \
    --create-subnetwork name=cloud-run-subnet \
    --enable-master-authorized-networks \
    --enable-ip-alias \
    --enable-private-nodes \
    --enable-private-endpoint \
    --master-ipv4-cidr 172.16.0.32/28 \
    --no-enable-basic-auth \
    --no-issue-client-certificate \
    --addons=HorizontalPodAutoscaling,HttpLoadBalancing,Istio,CloudRun \
    --machine-type=n1-standard-1 \
    --enable-stackdriver-kubernetes \
    --scopes cloud-platform \
    --zone us-central1-a

Я создал хост-бастион в том же VPC и подсети, который может связываться с этим кластером, используя следующую команду:

gcloud compute instances create bastion \
 --zone us-central1-a \
 --subnet cloud-run-subnet \
 --machine-type=g1-small \
 --scopes cloud-platform

Я установил kubectl на хост-бастион и переключил контекст на этот кластер с помощью команды gcloud container clusters get-credentials.

Я убедился, что Istio включен в пространстве имен по умолчанию, используя следующую команду:

kubectl label namespace default istio-injection=enabled

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

gcloud beta run deploy hello \
    --image=gcr.io/projectname/hello-world \
    --platform=gke \
    --cluster=cluster-name \
    --cluster-location=us-central1-a \
    --connectivity=internal

Ошибка:

ERROR: (gcloud.beta.run.deploy) Error:                                                                                                                                                                             
failed calling webhook "webhook.serving.knative.dev": Post https://webhook.knative-serving.svc:443/?timeout=30s: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting he
aders)

Я пробовал и --connectivity=internal, и --connectivity=external, получаю ту же ошибку.

Когда я пытаюсь создать службу с помощью консоли, я получаю следующую ошибку:

Failed to create a service

Tracking number: d123456789

Я сохранил один и тот же проект для реестра контейнеров (gcr.io) и кластера GKE.

Точные вещи отлично работают с общедоступными кластерами. Я не могу найти конкретную документацию, чтобы все это работало с частным кластером GKE. Что-то мне не хватает? Что я делаю неправильно?


person Amit Yadav    schedule 26.09.2019    source источник


Ответы (2)


Аналогичная проблема была исправлена ​​в этой ветке GitHub:

https://github.com/knative/serving/issues/4868

Основная причина заключается в том, что в частном кластере GKE по умолчанию только мастер GKE имеет доступ к службам на порте 443 или 80.


Не могли бы вы попробовать использовать порт 8443 вместо 443 и занести порт 8443 в белый список.

https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#add_firewall_rules.

person Toni    schedule 10.10.2019
comment
Спасибо за замечание. Сейчас я немного занят другими задачами, я попробую и дам вам знать, сработало ли это через несколько дней. - person Amit Yadav; 16.10.2019

Можете ли вы попробовать развернуть службу Cloud Run с файлом yaml?

Вот файл

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: hello
  namespace: default
spec:
  traffic:
  - percent: 100
    latestRevision: true
  template:
    spec:
      containers:
      - image: gcr.io/projectname/hello-world

Просто выполните kubectl apply -f <file> со своего бастиона

Если это работает, это означает, что команда gcloud не может взаимодействовать с частным кластером (и вы можете открыть проблему по этому поводу).

person guillaume blaquiere    schedule 26.09.2019
comment
Неа. Это не работает, это дает Error from server (InternalError): error when creating "knative.yaml": Internal error occurred: failed calling webhook "webhook.serving.knative.dev": Post https://webhook.knative-serving.svc:443/?timeout=30s: dial tcp xx.xx.x.xx:8443: i/o timeout , который я пробовал как для частных, так и для публичных кластеров. Он отлично работает для общедоступных кластеров и не работает для частного. - person Amit Yadav; 26.09.2019
comment
K8S иногда загадочен ... Извините, но мои навыки на этом заканчиваются. И я никогда не управлял таким частным кластером. Поддерживаю ваш вопрос, это действительно интересно - person guillaume blaquiere; 26.09.2019