#kubernetes #google-cloud-platform #google-kubernetes-engine #service-accounts
#kubernetes #google-облачная платформа #google-kubernetes-engine #учетные записи служб
Вопрос:
Если вы задаете информацию о кластере с помощью get-credentials , kubectl не позволит вам подключаться к такой информации, как модули. Это доступ к API kubernetes изнутри модуля, а подключенная учетная запись службы имеет кластерную роль администратора кластера RBAC.
Во-первых, сразу после активации модуля это нормально.
foo@abcd:~$ kubectl get po
NAME READY STATUS RESTARTS AGE
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 2/2 Running 0 27h
yyyyyyyyyyyyyyyyyyyyyyyyyyy 1/1 Running 0 27h
zzzzzzzzzzzzzzzzzzzzzzzzz 1/1 Running 0 18m
В этом случае кластер и контекст не заданы.
apiVersion: v1
clusters: null
contexts:
current-context: ""
kind: Config
preferences: {}
users:
- name: gke_prj_zone_cluster-name
user:
auth-provider:
config:
access-token: xxxxxx
expiry: "2020-10-03T04:29:36.29112618 09:00"
name: gcp
Затем задайте информацию о кластере.
gcloud container clusters get-credentials cluster-name --zone zone --project prj
Посмотрите на настройки еще раз.
foo@bar:~$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA OMITTED
server: https://12.34.56.78
name: gke_prj_zone_cluster-name
contexts:
- context:
cluster: gke_prj_zone_cluster-name
user: gke_prj_zone_cluster-name
name: gke_prj_zone_cluster-name
current-context: gke_prj_zone_cluster-name
kind: Config
preferences: {}
users:
- name: gke_prj_zone_cluster-name
user:
auth-provider:
config: null
name: gcp
Тогда мои полномочия исчезли.
foo@bar:~$ kubectl get po
Error from server (Forbidden): pods is forbidden: User "123456789-compute@developer.gserviceaccount.com" cannot list resource "pods" in API group "" in the namespace "default": requires one of ["container.pods.list"] permission(s).
Почему они теряют свои полномочия?
======================== Из-за операции с модулем gke я не получил учетные данные первым, я просто прикрепил кластерную роль (cluster-admin) к gke.
с помощью helmfile
{{- if .Values.serviceAccount.create -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "serviceAccountName" . }}
labels:
{{- include "labels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: {{ include "serviceAccountName" . }}
namespace: {{ .Release.Namespace }}
{{- end }}
Комментарии:
1. Можете ли вы показать всю команду, которую вы используете, с самого начала. Я не знаю, как вы получили первые учетные данные.
2. Из-за операции с модулем gke я не получил учетные данные первым, я просто прикрепил кластерную роль (администратор кластера) к gke. [postscript]
3. Может ли быть так, что учетная запись службы, установленная на pod, с самого начала имеет только рабочие привилегии для текущего кластера? Если да, могу ли я получить доступ ко всем кластерам изнутри модуля? Учетная запись службы, созданная terraform with
gcloud auth
, была аутентифицирована как учетная запись службы по умолчанию и не могла получить контейнер, даже если она была подключена к API kubernetes.4. Я смог подключиться к нему, скопировав ~/.kube/config , который используется локально, в модуль и выполнив
kubectl get po --kubeconfig=copied-conf
. Проблема, похоже, в конфигурации kubeconfig в модуле. Есть ли простой способ получить эту конфигурацию?5. Но конфигурация kubeconf имеет короткий срок, и я хочу легко автоматически фиксировать эту конфигурацию.
gcloud container clusters get-credentials ${cluster-name} --zone ${zone} --project ${prj}
Интересно, почему auth-provider в значительной степени отсутствует в учетных данных, которые я получаю, возможно