Запрещенная ошибка при использовании разделенного задания с потоком данных Spring Cloud в Kubernetes
Я хочу реализовать удаленное секционированное задание с помощью Spring Cloud Data Flow на Kuberentes. Сервер Skipper не установлен, потому что мне просто нужно запускать задачи и задания.
Я изменил образец проекта многораздельного пакетного задания, используя spring-cloud-deployer-kubernetes вместо локального, как предлагается здесь .
Когда основное задание пытается запустить воркера, я получаю сообщение об ошибке «Запрещено» в журналах модуля:
io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: GET at: https://10.43.0.1/api/v1/namespaces/svi-scdf-poc/pods/partitionedbatchjobtask-39gvq3p8ok. Message: Forbidden!Configured service account doesn't have access. Service account may have been revoked. pods "partitionedbatchjobtask-39gvq3p8ok" is forbidden: User "system:serviceaccount:svi-scdf-poc:default" cannot get resource "pods" in API group "" in the namespace "svi-scdf-poc".
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:589) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.assertResponseCode(OperationSupport.java:526) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:492) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:451) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleGet(OperationSupport.java:416) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleGet(OperationSupport.java:397) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleGet(BaseOperation.java:890) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.getMandatory(BaseOperation.java:233) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:187) ~[kubernetes-client-4.10.3.jar:na]
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:79) ~[kubernetes-client-4.10.3.jar:na]
at org.springframework.cloud.deployer.spi.kubernetes.KubernetesTaskLauncher.getPodByName(KubernetesTaskLauncher.java:411) ~[spring-cloud-deployer-kubernetes-2.5.0.jar:2.5.0]
at org.springframework.cloud.deployer.spi.kubernetes.KubernetesTaskLauncher.buildPodStatus(KubernetesTaskLauncher.java:350) ~[spring-cloud-deployer-kubernetes-2.5.0.jar:2.5.0]
at org.springframework.cloud.deployer.spi.kubernetes.KubernetesTaskLauncher.buildTaskStatus(KubernetesTaskLauncher.java:345) ~[spring-cloud-deployer-kubernetes-2.5.0.jar:2.5.0]
Насколько я понимаю, должно быть правильно, что основной модуль заданий пытается развернуть рабочий модуль, так что, похоже, это просто проблема с разрешением, или требуется сервер Skipper?
Если мои предположения верны, следует ли мне просто настроить SCDF для назначения особой учетной записи службы главному модулю?
1 ответ
Возникла та же проблема для partitioned-batch-job, но увидела эти параметры в официальной документации, чтобы указать учетную запись службы на уровне приложения и сервера . Я попробовал первый уровень приложения (через свойства запуска задач панели управления SCDF), и он сработал. Я только что указал учетную запись службы, созданную развертыванием SCDF helm. Это заставило меня задуматься, почему это не используется по умолчанию, и потребовало, чтобы я снова указывал это при запуске приложения (т. Е. Не следует устанавливать это значение по умолчанию для учетной записи службы уровня сервера). Журналы модуля показали, что при запуске использовалась учетная запись службы k8s по умолчанию.