kubernetes - Pod 无法从私有 Docker 注册表中提取图像
问题描述
我在让我的 pod 从我已设置并能够进行身份验证的私有 docker 注册表中提取图像时遇到了一些真正的麻烦(我可以执行 docker login https://my.website.com/并且我在没有登录的情况下成功输入我的用户名:密码)(我可以运行docker pull my.website.com:5000/human/forum
并查看所有正在下载的图层。)。
我使用https://github.com/bazelbuild/rules_k8s#aliasing-eg-k8s_deploy我将命名空间指定为"default"
.
在生成密钥之前,我确保将"HTTPS://my.website.com:5000/V2/"
(小写)放入 docker 配置文件的 auth 部分。regcred
请注意,我指定了imagePullSecrets
以下内容:
# deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: angular-bazel-example-prod
spec:
replicas: 1
template:
metadata:
labels:
app: angular-bazel-example-prod
spec:
containers:
- name: angular-bazel-example
image: human/forum:dev
imagePullPolicy: Always
ports:
- containerPort: 8080
imagePullSecrets:
- name: regcred # Notice
我确保更新我的证书颁发机构证书:
cp /etc/docker/certs.d/my.website.com\:5000/ca.crt /usr/local/share/ca-certificates/my.website.registry.com/
sudo update-ca-certificates
我懂了sudo curl --user testuser:testpassword --cacert /usr/local/share/ca-certificates/my.website.registry.com/ca.crt -X GET https://mywebsite.com:5000/v2/_catalog
>{"repositories":["human/forum"]}
我懂了sudo curl --user testuser:testpassword --cacert /usr/local/share/ca-certificates/mywebsite.registry.com/ca.crt -X GET https://mywebsite.com:5000/v2/human/forum/tags/list
>{"name":"a/repository","tags":["dev"]}
一定有办法解决这个问题,但我不知道如何。
我很好奇的一件事是
kubectl describe pod my-first-pod...
...
Volumes:
default-token-mtz9g:
Type: Secret
我在哪里可以找到这个卷?我无法kubectl exec
进入容器,因为没有一个正在运行..因为 pod 无法提取图像。
您对我如何解决此问题有任何想法吗?
谢谢!
Slackware
解决方案
创建一个 Kubernetes 密钥以访问自定义存储库。一种方法是手动提供服务器、用户和密码。文档链接。
kubectl create secret docker-registry $YOUR_REGISTRY_NAME --docker-server=https://$YOUR_SERVER_DNS/v2/ --docker-username=$YOUR_USER --docker-password=$YOUR_PASSWORD --docker-email=whatever@gmail.com --namespace=default
然后在你的 yaml 中使用它
...
imagePullSecrets:
- name: $YOUR_REGISTRY_NAME
关于您看到挂载的默认令牌,它属于您的 pod 用来与 kubernetes api 对话的服务帐户。kubectl get sa
您可以通过运行和找到服务帐户kubectl describe sa $DEFAULT_SERVICE_ACCOUNT_ID
。kubectl get secrets
通过运行和找到令牌kubectl describe secret $SECRET_ID
。澄清此服务帐户和令牌与 docker 注册表无关,除非您指定它。要在服务帐户中包含注册表,请按照此指南链接
推荐阅读
- linux - 断点未命中 - 在 Visual Studio 中使用 C++ 进行 Linux 开发
- react-native - TypeError:未定义不是一个对象(评估'navigator.geolocation.requestAuthorization')
- .net - 有没有办法从图中过滤异常值,因此在交叉表中,我不应该看到异常值
- c++ - 加载 std::queue 的更有效方法
与元素? - javascript - React 为什么仍然将函数传递给组件?
- php - 无法使用 Ajax 运行 sql 查询
- java - 如何从列表适配器刷新布局/上下文(我认为这是我需要的)
- visual-studio - 从智能感知中永久过滤属性/方法?
- php - 如何防止用户检查页面和编辑表单元素的值?
- laravel - 提供的 CWD 不存在