10个版本
0.1.10 | 2020年3月30日 |
---|---|
0.1.9 | 2020年3月30日 |
#10 在 #服务账户
每月22次下载
115KB
1.5K SLoC
k8s-gcr-auth-helper
为Google容器注册表暴露用户凭证作为图像拉取密钥的Kubernetes身份验证助手。
为什么你需要这个?
如果你在Google容器注册表中存储了私有容器镜像,但想使用本地Kubernetes集群测试它们,例如 k3d/k3s 或 minikube,你需要向你的本地Kubernetes集群提供身份验证细节。
如果你没有在Google云中创建服务账户的权限,你必须使用短期(1小时)访问令牌。每小时更新密钥很快就会变得烦人。
此助手自动解决此问题。
安装
从GitHub发布版提供预构建的二进制文件。
可以从stephenc/stable获取OS-X Homebrew软件包: brew install stephenc/stable/k8s-gcr-auth-helper
其他平台可以使用Cargo从源代码构建
构建
cargo install k8s-gcr-auth-helper
注意: 在Windows上,如果您在构建带有本地TLS时遇到问题,可以切换到rustls,例如。
cargo install k8s-gcr-auth-helper --no-default-features --features rustls-tls
测试
如果您想使用add
模式,也需要构建并使docker镜像可供您的Kubernetes集群使用。例如,要使用k3d测试您的本地更改
# set up a cluster to test with
k3d create --name auth-test
export KUBECONFIG=$(k3d get-kubeconfig --name auth-test)
# build the controller image with local changes (do not use :latest as that will pull Always)
docker build --tag k8s-gcr-auth-helper:local .
# run the local changes helper
cargo run -- add --controller-image k8s-gcr-auth-helper:local --service-account default gcr-secret
# now deploy your services into k3d that use a GCR hosted image
# when done, so you can try again
cargo run -- remove --service-account default gcr-secret
# when really done
k3d delete --name auth-test
使用
我不介意我的刷新令牌存储在我的集群中
在当前Kubernetes集群的当前命名空间中安装
k8s-gcr-auth-helper add gcr-pull-secret-name
安装并添加到默认服务账户
k8s-gcr-auth-helper add --service-account default gcr-pull-secret-name
安装并添加到命名空间中的所有服务账户
k8s-gcr-auth-helper add --all-service-accounts gcr-pull-secret-name
注意: 您可以指定多个--service-account
参数以安装到多个服务账户。要安装到多个命名空间,请多次运行命令(如果需要,请使用--namespace
以避免更改命名空间)
首次运行该命令时,它将打开浏览器以获取OAuth2刷新令牌,该令牌将被存储在集群中。将创建一个监听认证失败并按需刷新访问令牌密钥的刷新服务部署。
要删除,请使用相同的命令,将add
替换为remove
,例如。
k8s-gcr-auth-helper remove gcr-pull-secret-name
注意:如果您已手动将imagePullSecrets
引用添加到其他服务账户,您可以使用--service-account ...
指定它们,或者您可以使用--all-service-accounts
从所有账户中清除密钥引用。如果您忘记了,您可以始终手动编辑服务账户。
我很偏执
偏执模式假设您已配置并认证了gcloud
。
k8s-gcr-auth-helper gcloud gcr-pull-secret-name
这将在您的终端本地运行刷新服务的不同版本。当进程运行时,任何认证失败都将通过将请求分叉到本地安装的gcloud
程序来请求新的访问令牌。一旦您终止进程,更新将停止,并且集群中的访问令牌最多在1小时内过期。
依赖项
~79MB
~1.5M SLoC