【问题标题】:How to create a kubectl config file for serviceaccount如何为 serviceaccount 创建 kubectl 配置文件
【发布时间】:2018-05-26 00:34:15
【问题描述】:

我在 Azure 上有一个 Kubernetes 集群,我创建了 2 个命名空间和 2 个服务帐户,因为我有两个团队在集群上部署。 我想为我创建的 serviceaccount 为每个团队提供自己的 kubeconfig 文件。

我对 Kubernetes 还很陌生,在 kubernetes 网站上找不到明确的说明。如何为服务帐户创建 kube 配置文件? 希望有人可以帮助我:),我宁愿不将默认的 kube 配置文件提供给团队。

致以诚挚的问候,

布拉姆

【问题讨论】:

    标签: azure kubernetes kubectl


    【解决方案1】:
    # your server name goes here
    server=https://localhost:8443
    # the name of the secret containing the service account token goes here
    name=default-token-sg96k
    
    ca=$(kubectl get secret/$name -o jsonpath='{.data.ca\.crt}')
    token=$(kubectl get secret/$name -o jsonpath='{.data.token}' | base64 --decode)
    namespace=$(kubectl get secret/$name -o jsonpath='{.data.namespace}' | base64 --decode)
    
    echo "
    apiVersion: v1
    kind: Config
    clusters:
    - name: default-cluster
      cluster:
        certificate-authority-data: ${ca}
        server: ${server}
    contexts:
    - name: default-context
      context:
        cluster: default-cluster
        namespace: default
        user: default-user
    current-context: default-context
    users:
    - name: default-user
      user:
        token: ${token}
    " > sa.kubeconfig
    

    【讨论】:

    • 命令 ca=...token=...namespace=... 如果密钥位于 default 以外的命名空间中,则会失败。 IMO 您还必须预先设置 namespace 而不是计算它。顺便说一句,here 是一个相关的,仍然没有答案的问题。
    • 这是我得到的:base64: invalid option -- 'D' 尝试 'base64 --help' 获取更多信息。这是-d,不是-D
    • base64 --decode-D(仅 MacOS?)或 -d(Debian 和 FreeBSD,Busybox => 更兼容桌面操作系统(DebianFreeBSD 和 MacOS) )(抄送:@AlexGrönholm)
    • 也可以使用kubectl get sa -n namespace service_account_name -o jsonpath='{.secrets[0].name}'提取名称
    • 当我使用上面的 yaml 时,我得到如下错误:错误:无法识别“sa.kubeconfig”:版本“v1”中的种类“Config”没有匹配
    【解决方案2】:

    我清理了一下Jordan Liggitt's script

    很遗憾,我还不能发表评论,所以这是一个额外的答案:

    # The script returns a kubeconfig for the service account given
    # you need to have kubectl on PATH with the context set to the cluster you want to create the config for
    
    # Cosmetics for the created config
    clusterName=some-cluster
    # your server address goes here get it via `kubectl cluster-info`
    server=https://157.90.17.72:6443
    # the Namespace and ServiceAccount name that is used for the config
    namespace=kube-system
    serviceAccount=developer
    
    ######################
    # actual script starts
    set -o errexit
    
    secretName=$(kubectl --namespace $namespace get serviceAccount $serviceAccount -o jsonpath='{.secrets[0].name}')
    ca=$(kubectl --namespace $namespace get secret/$secretName -o jsonpath='{.data.ca\.crt}')
    token=$(kubectl --namespace $namespace get secret/$secretName -o jsonpath='{.data.token}' | base64 --decode)
    
    echo "
    ---
    apiVersion: v1
    kind: Config
    clusters:
      - name: ${clusterName}
        cluster:
          certificate-authority-data: ${ca}
          server: ${server}
    contexts:
      - name: ${serviceAccount}@${clusterName}
        context:
          cluster: ${clusterName}
          namespace: ${namespace}
          user: ${serviceAccount}
    users:
      - name: ${serviceAccount}
        user:
          token: ${token}
    current-context: ${serviceAccount}@${clusterName}
    "
    
    

    【讨论】:

      【解决方案3】:

      可以初始化 Kubectl 以使用集群帐户。为此,请获取集群 url、集群证书和帐户令牌。

      KUBE_API_EP='URL+PORT'
      KUBE_API_TOKEN='TOKEN'
      KUBE_CERT='REDACTED'
      
      echo $KUBE_CERT >deploy.crt
      kubectl config set-cluster k8s --server=https://$KUBE_API_EP \ 
          --certificate-authority=deploy.crt  \
          --embed-certs=true
      kubectl config set-credentials gitlab-deployer --token=$KUBE_API_TOKEN
      kubectl config set-context k8s --cluster k8s --user gitlab-deployer
      kubectl config use-context k8s
      

      集群文件存放在:~/.kube/config。现在可以使用以下方式访问集群:

      kubectl --context=k8s get pods -n test-namespace
      

      如果您使用的是自签名证书,请添加此标志 --insecure-skip-tls-verify

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2021-06-07
        相关资源
        最近更新 更多