Ваш вопрос довольно подробный (и о Java, в котором я не специалист), и там на самом деле слишком много вопросов (в идеале, пожалуйста, задайте только 1 вопрос здесь). Однако я постараюсь ответить на несколько вопросов, которые вы спрашивали:
Во-первых, Cloud Run (управляемый и в GKE) реализует API-интерфейс Knative Serving. Я объяснил это на https://ahmet.im/blog/cloud-run-is-a-knative/ На самом деле, Cloud Run на GKE - это просто компоненты Knative с открытым исходным кодом, установленные в вашем кластере.
И мой следующий вопрос: как программно создавать сервисы Cloud Run на GKE?
У вас будет очень трудное время (если вообще возможно) с использованием клиентских библиотек Cloud Run API (например, new CloudRun
выше), поскольку они предназначены для конечных точек *.googleapis.com
.
Часть Knative API в «Cloud Run on GKE» на самом деле является просто конечной точкой главного API Kubernetes (GKE) (которая выполняется на IP-адресе с Сертификат TLS, которому не доверяют root CA, но вы можете найти сертификат CA в вызове API GKE GetCluster для проверки сертификата.) TLS - это часть того, почему так сложно использовать клиентские библиотеки API.
Knative API - это просто объекты Kubernetes. Таким образом, ваш лучший выбор - один из них:
- См. Клиент Kubernetes java (https://github.com/kubernetes-client/java) фактически разрешает динамические c объекты. (Реализация Go делает) и попытайтесь использовать это для создания Knative CRD.
- Используйте
kubectl apply
. - Обратитесь за помощью к репозиторию открытого исходного кода Knative Serving (они должны предоставлять клиентские библиотеки, может быть, они уже там, я не уверен)
Для программирования Cloud Run (управляемый) с помощью клиентских библиотек API необходимо явно переопределить конечную точку API для регион например us-central1-run.googleapis.com
. (Это описано в справочной документации по API REST каждого вызова API.)
Я написал подробное сообщение в блоге (с примером кода в Go) о том, как создавать / обновлять службы в Cloud Run (управляемые) используя Knative Serving API здесь: https://ahmet.im/blog/gcloud-run-deploy/
Если вы хотите увидеть, как работает gcloud run deploy
и какие API он вызывает, вы можете передать опцию --log-http
, чтобы выполнить запрос / трафик ответа c.
Что касается полученной ошибки, то кажется, что сообщение об ошибке бесполезно, но оно может приходить откуда угодно (поскольку вы пытаетесь имитировать Knative API в клиентских библиотеках GCP). Я рекомендую прочитать мои сообщения в блоге и образец кода подробно.
ОБНОВЛЕНИЯ: Наша команда инженеров смотрит на проблему, кажется, что в настоящее время есть ошибка, не добавляющая "детали" поле до ошибки. Это работает над.
В вашем случае мы видим следующие ошибки из запросов:
field: "spec.template.spec"
description: "Missing template spec."
Означает, что вы не правильно заполняете поле spe c, как я показал в моем сообщение в блоге и пример кода.
field: "metadata.name"
description: "The revision name must be prefixed by the name of the enclosing Service or Configuration with a trailing -"
Убедитесь, что указанное имя соответствует шаблонам, указанным в документации API. Попробуйте создать это имя вручную, возможно, в пользовательском интерфейсе или в CLI gcloud.
field: "api_version"
description: "Unsupported API version \'serving.knative.dev/v1\'. Expected \'serving.knative.dev/v1alpha1\'"
Не используйте API v1alpha1, используйте непосредственно v1.
Мы попытаемся получить подробную информацию об ошибке сообщение, однако кажется, что вам нужно изучить пример кода, который я привел в моем блоге более подробно: https://github.com/GoogleCloudPlatform/cloud-run-button/blob/a52c7fbaae33a3e06c112206c7227a0ef9649647/cmd/cloudshell_open/deploy.go#L26 -L112