#kubernetes #容器 #注册表 #密钥 #谷歌 #服务账户 #助手

程序+库 k8s-gcr-auth-helper

为Google容器注册表暴露用户凭证作为图像拉取密钥的Kubernetes身份验证助手

10个版本

0.1.10 2020年3月30日
0.1.9 2020年3月30日

#10#服务账户

每月22次下载

Apache-2.0

115KB
1.5K SLoC

k8s-gcr-auth-helper

Logo

Release Test Crates.io Crates.io Docker Image

为Google容器注册表暴露用户凭证作为图像拉取密钥的Kubernetes身份验证助手。

为什么你需要这个?

如果你在Google容器注册表中存储了私有容器镜像,但想使用本地Kubernetes集群测试它们,例如 k3d/k3sminikube,你需要向你的本地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