Joh*_*han 15 google-cloud-platform kubernetes google-kubernetes-engine google-container-registry
我正在尝试让Kubernetes从另一个项目的Google Container Registry下载图像.根据文档,您应该使用以下方法创建图像拉秘密:
$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
Run Code Online (Sandbox Code Playgroud)
但是,我不知道DOCKER_USER和DOCKER_PASSWORD我应该使用与谷歌容器注册认证?查看GCR文档,它说密码是您可以通过运行获得的访问令牌:
$ gcloud auth print-access-token
Run Code Online (Sandbox Code Playgroud)
这实际上有效......一段时间.问题似乎是这个访问令牌在(我相信是)一小时之后到期.我需要一个在创建图像拉秘密时不会过期的密码(或其他东西).否则Kubernetes群集在一小时左右后无法下载新图像.这样做的正确方法是什么?
Joh*_*han 14
这真的很棘手,但经过大量的追踪和错误,我认为我已经有了它的工作.
~/secret.json)现在从命令行使用Docker登录GCR:
$ docker login -e your@email.se -u _json_key -p "$(cat ~/secret.json)" https://eu.gcr.io
这将在您的文件中生成" https://eu.gcr.io " 条目~/.docker/config.json.
将" https://eu.gcr.io " 下的JSON结构复制到名为"〜/ docker-config.json"的新文件中,删除换行符!例如:
{"https://eu.gcr.io": { "auth": "<key>","email": "your@email.se"}}
Base64编码此文件:
$ cat ~/docker-config.json | base64
这将打印一个长base64编码的字符串,复制此字符串并将其粘贴到图像拉秘密定义(称为~/pullsecret.yaml):
Run Code Online (Sandbox Code Playgroud)apiVersion: v1 kind: Secret metadata: name: mykey data: .dockercfg: <paste base64 encoded string here> type: kubernetes.io/dockercfg
现在创建秘密:
$ kubectl create -f ~/pullsecret.yaml
Run Code Online (Sandbox Code Playgroud)apiVersion: v1 kind: Pod metadata: name: foo namespace: awesomeapps spec: containers: - image: "janedoe/awesomeapp:v1" name: foo imagePullSecrets: - name: mykey
或将其添加到服务帐户.
kubectl更容易
kubectl create secret docker-registry mydockercfg \
--docker-server "https://eu.gcr.io" \
--docker-username _json_key \
--docker-email not@val.id \
--docker-password=$(cat your_service_account.json)
Run Code Online (Sandbox Code Playgroud)
从谷歌下载your_service_account.json后的一个重要细节是将json中的所有行连接成一行.
此答案可确保只有一组 docker 凭据包含在您的 Kubernetes 密钥中,并为您处理修剪换行符。
请遵循 Johan 出色答案中的前三个步骤:
转到 Google 开发者控制台 > Api Manager > 凭据,然后单击“创建凭据”并创建“服务帐户密钥”
在“服务帐户”下选择“新建”并将新密钥命名为“gcr”(让密钥类型为 json)
创建密钥并将文件存储在磁盘上(从这里开始我们假设它存储在 下~/secret.json)
接下来,运行以下命令来生成所需的 Docker 凭据并将其注入集群:
export GCR_KEY_JSON=$(cat ~/secret.json | tr -d '\n')
mv ~/.docker/config.json ~/.docker/config-orig.json
cat >~/.docker/config.json <<EOL
{
"auths": {
"gcr.io": {}
}
}
EOL
docker login --username _json_key --password "$GCR_KEY_JSON" https://gcr.io
export DOCKER_CONFIG_JSON_NO_NEWLINES=$(cat ~/.docker/config.json | tr -d '\n')
mv ~/.docker/config-orig.json ~/.docker/config.json
cat >secrets.yaml <<EOL
apiVersion: v1
kind: Secret
metadata:
name: gcr-key
data:
.dockerconfigjson: $(echo -n ${DOCKER_CONFIG_JSON_NO_NEWLINES} | base64 | tr -d '\n')
type: kubernetes.io/dockerconfigjson
EOL
kubectl create -f secrets.yaml
Run Code Online (Sandbox Code Playgroud)
当您指定从 GCR 提取映像的 Pod 时,请gcr-key在您的spec部分中包含秘密名称:
spec:
imagePullSecrets:
- name: gcr-key
containers:
- image: ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7545 次 |
| 最近记录: |