无法将私有 package/image 从 GitHub Container Registry 拉入 Okteto Kubernetes
Cannot pull a private package/image from GitHub Container Registry into Okteto Kubernetes
希望大家多多指教没问题
问题简而言之:我的管道无法将私有图像从 GHCR.IO 拉入 Okteto Kubernetes,但来自同一个私有存储库的 public 图像可以工作。
我在 Windows 10 上,使用 WSL2-Ubuntu 20.04 LTS 和 kinD 进行开发,也尝试过 minikube。
我在 Okteto 中收到一条错误消息,提示图像拉取“未经授权”->“imagePullBackOff”。
我的事情 did:browsed Stack Overflow、RTFM、Okteto 常见问题解答、下载 Okteto kubeconfig、费尽心机并花费了比我愿意承认的更多的时间——仍然没有成功。
无论出于何种原因,我都无法创建有效的“kubectl secret”。当通过“docker login --username”登录到ghcr.io时,我可以在本地拉取私有图像。
无论我尝试过什么,在 Okteto 中尝试拉取私人图像时,我仍然收到“未经授权”的错误。
我的最新更新设置:
- Windows 10 专业版
- JetBrains Rider IDE
- WSL2-Ubuntu 20.04 LTS
- ASP.NET 核心 MVC 应用
- .NET 6 SDK
- Docker
- kinD
- 迷你库
- 巧克力
- 自制软件
设置类型
kind create cluster --name my-name
kubectl create my-namespace
// create a secret to pull images from ghcr.io
kubectl create secret docker-registry my-secret -n my-namespace --docker-username="my-username" --docker-password="my-password" --docker-email="my-email" --docker-server="https://ghcr.io"
// patch local service account
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-secret"}]}'
kubernetes.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: okteto-repo
namespace: my-namespace
spec:
replicas: 1
selector:
matchLabels:
app: okteto-repo
template:
metadata:
labels:
app: okteto-repo
spec:
containers:
- name: okteto-repo
image: ghcr.io/user/okteto-repo:latest
ports:
- containerPort: 80
imagePullSecrets:
- name: my-secret
---
apiVersion: v1
kind: Service
metadata:
name: okteto-repo
annotations:
dev.okteto.com/auto-ingress: "true"
spec:
type: ClusterIP
selector:
app: okteto-repo
ports:
- protocol: TCP
port: 8080
targetPort: 80
您知道它为什么不起作用以及我可以做什么吗?
非常感谢我亲爱的朋友们,非常感谢每一个输入!
希望你们假期愉快。
干杯,
迈克尔
通过执行以下操作,我能够拉取私有镜像:
- 在 GitHub 中创建具有
repo
访问权限的个人令牌。
- 构建并将映像推送到 GitHub 的容器注册表(我使用
okteto build -t ghcr.io/rberrelleza/go-getting-started:0.0.1
)
- 通过 运行
okteto context update-kubeconfig
从 Okteto Cloud 下载我的 kubeconfig credentials。
- 使用我的凭据创建一个秘密:
kubectl create secret docker-registry gh-regcred --docker-server=ghcr.io --docker-username=rberrelleza --docker-password=ghp_XXXXXX
- 修补了默认帐户以将机密作为镜像拉取机密包含在内:
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gh-regcred"}]}'
- 更新了 kubernetes 清单中的镜像名称
- 已创建部署(
kubectl apply -f k8s.yaml
)
这些是我的 kubernetes 资源的样子,以防有帮助:
# k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- image: ghcr.io/rberrelleza/go-getting-started:0.0.1
name: hello-world
---
apiVersion: v1
kind: Service
metadata:
name: hello-world
annotations:
dev.okteto.com/auto-ingress: "true"
spec:
type: ClusterIP
ports:
- name: "hello-world"
port: 8080
selector:
app: hello-world
# default SA
apiVersion: v1
imagePullSecrets:
- name: gh-regcred
- name: okteto-regcred
kind: ServiceAccount
metadata:
creationTimestamp: "2021-05-21T22:26:38Z"
name: default
namespace: rberrelleza
resourceVersion: "405042662"
uid: 2b6a6eef-2ce7-40d3-841a-c0a5497279f7
secrets:
- name: default-token-7tm42
希望大家多多指教没问题
问题简而言之:我的管道无法将私有图像从 GHCR.IO 拉入 Okteto Kubernetes,但来自同一个私有存储库的 public 图像可以工作。
我在 Windows 10 上,使用 WSL2-Ubuntu 20.04 LTS 和 kinD 进行开发,也尝试过 minikube。
我在 Okteto 中收到一条错误消息,提示图像拉取“未经授权”->“imagePullBackOff”。
我的事情 did:browsed Stack Overflow、RTFM、Okteto 常见问题解答、下载 Okteto kubeconfig、费尽心机并花费了比我愿意承认的更多的时间——仍然没有成功。
无论出于何种原因,我都无法创建有效的“kubectl secret”。当通过“docker login --username”登录到ghcr.io时,我可以在本地拉取私有图像。
无论我尝试过什么,在 Okteto 中尝试拉取私人图像时,我仍然收到“未经授权”的错误。
我的最新更新设置:
- Windows 10 专业版
- JetBrains Rider IDE
- WSL2-Ubuntu 20.04 LTS
- ASP.NET 核心 MVC 应用
- .NET 6 SDK
- Docker
- kinD
- 迷你库
- 巧克力
- 自制软件
设置类型
kind create cluster --name my-name
kubectl create my-namespace
// create a secret to pull images from ghcr.io
kubectl create secret docker-registry my-secret -n my-namespace --docker-username="my-username" --docker-password="my-password" --docker-email="my-email" --docker-server="https://ghcr.io"
// patch local service account
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-secret"}]}'
kubernetes.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: okteto-repo
namespace: my-namespace
spec:
replicas: 1
selector:
matchLabels:
app: okteto-repo
template:
metadata:
labels:
app: okteto-repo
spec:
containers:
- name: okteto-repo
image: ghcr.io/user/okteto-repo:latest
ports:
- containerPort: 80
imagePullSecrets:
- name: my-secret
---
apiVersion: v1
kind: Service
metadata:
name: okteto-repo
annotations:
dev.okteto.com/auto-ingress: "true"
spec:
type: ClusterIP
selector:
app: okteto-repo
ports:
- protocol: TCP
port: 8080
targetPort: 80
您知道它为什么不起作用以及我可以做什么吗?
非常感谢我亲爱的朋友们,非常感谢每一个输入!
希望你们假期愉快。
干杯, 迈克尔
通过执行以下操作,我能够拉取私有镜像:
- 在 GitHub 中创建具有
repo
访问权限的个人令牌。 - 构建并将映像推送到 GitHub 的容器注册表(我使用
okteto build -t ghcr.io/rberrelleza/go-getting-started:0.0.1
) - 通过 运行
okteto context update-kubeconfig
从 Okteto Cloud 下载我的 kubeconfig credentials。 - 使用我的凭据创建一个秘密:
kubectl create secret docker-registry gh-regcred --docker-server=ghcr.io --docker-username=rberrelleza --docker-password=ghp_XXXXXX
- 修补了默认帐户以将机密作为镜像拉取机密包含在内:
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gh-regcred"}]}'
- 更新了 kubernetes 清单中的镜像名称
- 已创建部署(
kubectl apply -f k8s.yaml
)
这些是我的 kubernetes 资源的样子,以防有帮助:
# k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- image: ghcr.io/rberrelleza/go-getting-started:0.0.1
name: hello-world
---
apiVersion: v1
kind: Service
metadata:
name: hello-world
annotations:
dev.okteto.com/auto-ingress: "true"
spec:
type: ClusterIP
ports:
- name: "hello-world"
port: 8080
selector:
app: hello-world
# default SA
apiVersion: v1
imagePullSecrets:
- name: gh-regcred
- name: okteto-regcred
kind: ServiceAccount
metadata:
creationTimestamp: "2021-05-21T22:26:38Z"
name: default
namespace: rberrelleza
resourceVersion: "405042662"
uid: 2b6a6eef-2ce7-40d3-841a-c0a5497279f7
secrets:
- name: default-token-7tm42