Spinnaker аутентифицирует K8s с помощью сервисной учетной записи. Не с системой: анонимно

Я вижу спинакер с помощью system:anonymous Пользователь для аутентификации K8s. Но я хочу, чтобы конкретный пользователь (которого я создал уже в K8) аутентифицировал K8. Я использовал ниже kubeconfig использовать пользователя veeru

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: RETRACTED
    server: https://xx.xx.xx.220:8443
  name: xx-xx-xx-220:8443
contexts:
- context:
    cluster: xx-xx-xx-220:8443
    namespace: default
    user: veeru/xx-xx-xx-220:8443
  name: area-51/xx-xx-xx-220:8443/veeru
current-context: area-51/xx-xx-xx-220:8443/veeru
kind: Config
preferences: {}
users:
- name: veeru/xx-xx-xx-220:8443
  user:
    client-certificate-data: RETRACTED
    client-key-data: RETRACTED

И я уточнил (как здесь) user в конфигурации (~/.hal/config), как показано ниже

kubernetes:
      enabled: true
      accounts:
      - name: my-k8s-account
        requiredGroupMembership: []
        providerVersion: V1
        dockerRegistries:
        - accountName: my-docker-registry2
          namespaces: []
        configureImagePullSecrets: true
        namespaces: ["area-51"]
        user: veeru
        omitNamespaces: []
        kubeconfigFile: /home/ubuntu/.kube/config
        oauthScopes: []
        oAuthScopes: []
      primaryAccount: my-k8s-account

Но спинакер все еще использует system:anonymous

2018-01-22 08:35:13.929 ERROR 4639 --- [pool-4-thread-1] c.n.s.c.o.DefaultOrchestrationProcessor  : com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.exception.KubernetesOperationException: Get Service openshifttest-dev in area-51 for account my-k8s-account failed: User "system:anonymous" cannot get services in the namespace "area-51": User "system:anonymous" cannot get services in project "area-51"

Есть ли способ указать пользователя, что спинакер должен использовать настроенного пользователя, кроме system:anonymous

UPDATE-1

Далее: https://blog.spinnaker.io/spinnaker-kubernetes-rbac-c40f1f73c172

Получил secret от kubectl describe secret spinnaker-service-account-token-9sl6q и обновить в kubeconfig как ниже

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://xx.xx.xx.xx:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: webapp
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context:
    cluster: kubernetes
    user: spinnaker-service-account
  name: spinnaker-context
current-context: spinnaker-context
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
- name: spinnaker-service-account
  user:
    token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9....

Чем я побежал sudo hal deploy

....
! ERROR Unable to communicate with your Kubernetes cluster: Failure
  executing: GET at: https://xx.xx.xx.xx:6443/api/v1/namespaces. Message:
  Forbidden! User spinnaker-service-account doesn't have permission. namespaces is
  forbidden: User "system:serviceaccount:default:spinnaker-service-account" cannot
  list namespaces at the cluster scope..
? Unable to authenticate with your Kubernetes cluster. Try using
  kubectl to verify your credentials.
....

Я могу бегать

$ kubectl get namespace webapp
NAME      STATUS    AGE
webapp    Active    22m

Я указал webapp пространство имен и пользователь как spinnaker-service-account в ~/.hal/config

1 ответ

Решение

Я использую GKE с отключенной базовой аутентификацией. У меня есть спинакер, использующий выделенную учетную запись службы K8s, которую я создал. В моем ~/.kube/config У меня есть токены для каждого кластера K8s.

users:
- name: gke_operation-covfefe-1_asia-east1_testing-asia-east1
  user:
    token: token1
- name: gke_operation-covfefe-1_europe-west1_testing-europe-west1
  user:
    token: token2
- name: gke_operation-covfefe-1_us-central1_testing-us-central1
  user:
    token: token3

Я получил эти токены, запустив

kubectl get secret spinnaker-service-account -o json \
 | jq -r .data.token \
 | base64 -d

а затем вручную обновить мой ~/.kube/config файл.

Убедитесь, что ваша учетная запись службы имеет необходимые разрешения RBAC. Смотрите сообщение в блоге здесь.

Обновить:

Также убедитесь, что вы предоставляете учетной записи службы необходимые разрешения RBAC. Смотрите раздел "Роль" в блоге выше или руководство здесь. Когда вы проверяете разрешения RBAC с kubectl убедитесь, что вы используете ту же учетную запись, что и Spinnaker.

Обновление 2

Если вы хотите, чтобы spinnaker действовал во всех пространствах имен, используйте ClusterRole и ClusterRoleBinding в вашем RBAC. В блоге используются только Role и RoleBinding, которые ограничивают действия определенным пространством (именами). Смотрите это руководство для Cluster* way. Обратите внимание на пиар, чтобы исправить опечатку здесь.

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