【问题标题】:Spinnaker authenticate K8s with service account. Not with system:anonymousSpinnaker 使用服务帐户对 K8s 进行身份验证。不带系统:匿名
【发布时间】:2018-01-27 02:11:34
【问题描述】:

我看到 spinnaker 使用 system:anonymous 用户来验证 K8s。但是我想要一个特定的用户(我已经在 K8s 中创建)来验证 K8s。我在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

我在 config(~/.hal/config) 中指定(如hereuser,如下所示

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"

有什么方法可以指定 spinnaker 应该使用配置的用户而不是 system:anonymous

UPDATE-1

已关注:https://blog.spinnaker.io/spinnaker-kubernetes-rbac-c40f1f73c172

kubectl describe secret spinnaker-service-account-token-9sl6q 获取secret 并在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

我在~/.hal/config 中将webapp 命名空间和用户指定为spinnaker-service-account

【问题讨论】:

    标签: kubernetes spinnaker spinnaker-halyard


    【解决方案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 权限。见blog post here

    更新:

    另外,请确保您为服务帐号授予所需的 RBAC 权限。请参阅上面博客文章的“角色”部分或guide here。当您使用 kubectl 测试 RBAC 权限时,请确保您使用的服务帐户与 Spinnaker 使用的服务帐户相同。

    更新 2

    如果您希望 spinnaker 作用于所有命名空间,请在 RBAC 中使用 ClusterRole 和 ClusterRoleBinding。该博客文章仅使用 Role 和 RoleBinding ,它们将操作限制在特定的命名空间中。有关 Cluster* 方式,请参见 this guide。注意PR to fix a typo here

    【讨论】:

    • 嗨大卫夏,感谢您的回答。我无法为spinnaker-service-account 提取secret,得到Error from server (NotFound): secrets "spinnaker-service-account" not found。我可以看到kubectl get sa 的服务帐户。我在 GKE 中测试过。有什么想法吗?
    • 好的,我得到了 token/secret 并在 kubeconfig 文件中指定。但 Spinnaker 正试图在集群范围内获取详细信息。你能在我的问题中检查UPDATE-1
    • 是的,我使用了您所说的博客中相同的 yml 文件来创建服务帐户。
    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多