我正在尝试从CI系统中调用kubectl。我希望使用Google云服务帐户进行身份验证。我有一个秘密管理系统,可以将秘密注入我的CI系统中。
但是,我的CI系统没有安装gcloud,我也不想安装它。它仅包含kubectl。是否可以通过kubectl直接使用包含gcloud服务帐户(而非kubernetes服务帐户)的certificate.json文件?
答案 0 :(得分:4)
跳过gcloud CLI的最简单方法是使用--token
选项。通过创建服务帐户并将其与ClusterRole
or Role
绑定到ClusterRoleBinding
or RoleBinding
,可以使用RBAC获得令牌。
然后从命令行:
$ kubectl --token <token-from-your-service-account> get pods
您的context
中仍然需要~/.kube/config
:
- context:
cluster: kubernetes
name: kubernetes-token
否则,您将必须使用:
$ kubectl --insecure-skip-tls-verify --token <token-from-your-service-account> -s https://<address-of-your-kube-api-server>:6443 get pods
请注意,如果您不希望令牌显示在日志中,则可以执行以下操作:
$ kubectl --token $(cat /path/to/a/file/where/the/token/is/stored) get pods
此外,请注意,这不会阻止您在ps -Af
进程的生命周期内在盒子上运行kubectl
并从那里抓取令牌(这是一个好主意,令牌)
编辑:
您可以将--token-auth-file=/path/to/a/file/where/the/token/is/stored
与kubectl
一起使用,以避免将其通过$(cat /path/to/a/file/where/the/token/is/stored)