Py学习  »  Git

无法将私有包/映像从GitHub容器注册表拉入Okteto Kubernetes

Michael • 3 年前 • 1502 次点击  

我希望可以征求你的意见。

简而言之,问题是:我的管道无法从GHCR中提取私人图像。IO变成了Okteto Kubernetes,但来自同一私人回购协议的公开图像。

我在Windows 10上使用WSL2 Ubuntu20.04 LTS和kinD for development,并尝试了minikube。

我在Okto中发现一个错误,它说图像拉取是未经授权的->拉回。

我做的事情:浏览堆栈溢出、RTFM、Okteto FAQ、下载Okteto kubeconfig、拔出头发,花了比我想承认的更多的时间,但仍然没有成功。

无论出于什么原因,我都无法创造一个行之有效的“库贝特秘密”。当登录到ghcr时。io通过——docker登录——用户名——我可以在本地提取私人图像。

无论我尝试了什么,当我试图在Okteo中提取私人图像时,仍然会出现未经授权的错误。

我的设置和最新更新:

  • Windows 10 Pro
  • 喷气式飞机驾驶员
  • WSL2 Ubuntu 20.04 LTS
  • ASP。NET核心MVC应用程序
  • .NET 6 SDK
  • 码头工人
  • 友善的
  • 巧克力味
  • 自制的

设置类型

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"}]}'

库伯内特斯。亚马尔

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

你知道为什么不行吗?我能做什么?

非常感谢我亲爱的朋友们,非常感谢你们的每一个意见!

希望你们假期愉快。

干杯 迈克尔

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129434
 
1502 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Ramiro Berrelleza
Reply   •   1 楼
Ramiro Berrelleza    3 年前

我可以通过以下操作获取私人图像:

  1. 使用在GitHub中创建个人令牌 repo 通道
  2. 构建图像并将其推送到GitHub的容器注册表(我使用 okteto build -t ghcr.io/rberrelleza/go-getting-started:0.0.1 )
  3. 下载我的 kubeconfig credentials 从Okto Cloud通过运行 okteto context update-kubeconfig .
  4. 使用我的凭据创建一个秘密: kubectl create secret docker-registry gh-regcred --docker-server=ghcr.io --docker-username=rberrelleza --docker-password=ghp_XXXXXX
  5. 对默认帐户进行了修补,以将该机密作为图像拉取机密: kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gh-regcred"}]}'
  6. 更新了kubernetes清单中的图像名称
  7. 创建了部署( 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