Как выполнить сценарий оболочки из POD A в другой POD B

У меня есть два модуля, которые работают внутри кластера кубернетов. Стручки следующие

  1. модуль mongodb, который имеет вид: StatefulSet
  2. модуль сценария, который имеет вид: Job

Из script pod Я запускаю сценарий bash, который будет выполняться на mongodb pod.

Сценарий bash содержит следующий код, который запускается в модуле mongodb и выполняет следующую команду.

kubectl exec mongo-0 -c mongo -- mongo --eval 'rs.initiate({_id: "rs0", version: 1, members: [ {_id: 0, host: "mongo-0.mongo.default.svc.cluster.local:27017"}, {_id: 1, host: "mongo-1.mongo.default.svc.cluster.local:27017"}, {_id: 2, host: "mongo-2.mongo.default.svc.cluster.local:27017"} ]});'

Но когда я бегу script pod, Я получаю ошибку ниже

Error from server (Forbidden): pods "mongo-0" is forbidden: User "system:serviceaccount:default:default" cannot create resource "pods/exec" in API group "" in the namespace "default"

Что мне делать, чтобы предоставить разрешения для script pod запустить указанную выше команду в модуле mongodb?


Итак, как вы сказали, я создал другой модуль типа:job и включил script.sh.

В файле script.sh я запускаю "kubectl exec" в основной модуль, чтобы выполнить несколько команд.

Скрипт запускается, но я получаю сообщение об ошибке "не удается создать ресурс"pods/exec in API group"

Поэтому я создал роль кластера с ресурсами: ["pods/exec"] и привязал ее к учетной записи службы по умолчанию с помощью ClusterRoleBinding.

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create"]

--- 

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: service-account-role-binding
  namespace: default
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

---

apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default


In the pod which is of kind:job, I include the service account like shown below

restartPolicy: Never
serviceAccountName: default

but I still get the same error. What am I doing wrong here ?

Error from server (Forbidden): pods "mongo-0" is forbidden: User "system:serviceaccount:default:default" cannot create resource "pods/exec" in API group "" in the namespace "default"

1 ответ

Если это то, что необходимо регулярно запускать для обслуживания, посмотрите объект набора демонов Kubernetes.

Другие вопросы по тегам