amazon-web-services - 使用 AWS EKS 和 AWS Fargate 从私有(private) github 包中提取 docker 镜像

标签 amazon-web-services docker kubernetes aws-fargate amazon-eks

我希望在 aws 上使用 kubernetes 部署一个 dockerized 服务。为此,我使用了最近发布的带有 AWS Fargate 功能的 AWS EKS。服务的 docker 镜像存储在 github 上的私有(private)包中。

为了部署我的服务,我使用了一个包含 secret 、部署和服务的 kubernetes list 文件。

在 minikube 上使用 kubectl 本地部署时,部署 pod 成功从私有(private) github 包中拉取镜像。我成功地重现了访问私有(private) dockerhub 注册表的过程。

然后我将 kubectl 配置为连接到我的 eks 集群。 应用 list 文件时,当从 dockerhub 拉出 github 包时,它工作正常时,我得到部署 pod 的 ImagePullBackOff 状态. list 文件的区别如下:

为 github 包生成 secret :

kubectl create secret docker-registry mySecret --dry-run=true --docker-server=https://docker.pkg.github.com --docker-username=myGithubUsername --docker-password=myGithubAccessToken -o yaml

为 dockerhub 生成 secret :
kubectl create secret docker-registry mySecret --dry-run=true --docker-server=https://index.docker.io/v1/ --docker-username=myDockerhubUsername --docker-password=myDockerhubPassword -o yaml

部署规范引用如下:
spec:
  containers:
    # when pulling from github packages 
    - image: docker.pkg.github.com/myGithubUsername/myRepo/myPackage:tag
    # when pulling from dockerhub 
    - image: myDockerhubUsername/repository:tag
    ...
  imagePullSecrets:
    - name: mySecret

试图完成这项工作特别是 github 包 我尝试了 AWS Secrets Manager。

我创建了一个 secret “mySecret”,如下所示:
{
  "username" : "myGithubUsername",
  "password" : "myGithubAccessToken"
}

然后我创建了一个策略来访问这个 secret :
{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetSecretValue"
        ],
        "Resource": [
            "arn:aws:secretsmanager:eu-west-1:myAWSAccountId:secret:mySecret"
        ]
    }
  ]
}

然后,我将该策略附加到我的 eks 集群的集群 IAM 角色和其 fargate 配置文件“fp-default”中引用的 Pod 执行角色。我只在默认的 kubernetes 命名空间中工作。
我的 secret 和集群都在 eu-west-1 区域。

不过,我在部署时得到了 ImagePullBackOff 状态。

我很难找到使用 AWS Fargate 和 AWS EKS 解决此问题的任何方法,并且希望对此有所了解:)

编辑 :对问题进行了编辑,以便更清楚地表明该问题主要与使用 github 包作为注册表提供程序有关。

最佳答案

我认为您需要在与部署相同的命名空间中创建您的 secret 。我能够通过创建一个 secret 来完成这项工作

kubectl create secret docker-registry mySecret --dry-run=true --docker-server=https://docker.pkg.github.com --docker-username=myGithubUsername --docker-password=myGithubAccessToken --namespace=my-api -o yaml

在我的 deployment.yaml 中,我引用它就像
    spec:
      containers:
        - name: my-api
          image: docker.pkg.github.com/doc-api:0.0.0
          ports:
          - containerPort: 5000
          resources: {}
      imagePullSecrets:
        - name: mySecret

关于amazon-web-services - 使用 AWS EKS 和 AWS Fargate 从私有(private) github 包中提取 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60380811/

相关文章:

amazon-web-services - 如何重命名 Amazon S3 中的文件和文件夹?

amazon-web-services - 如何使用 CF 正确配置 Route53 HealthCheck 警报(悉尼)

python - 使用docker时无法打开共享对象文件

node.js - 在 Node 生成命令中回显 bash 变量

postgresql - docker 容器 : Relation X doesn't exist in database

kubernetes - 指标服务器在 Kubernetes 集群中不起作用

kubernetes - 如何向我的第三方私有(private) docker 注册表验证 GKE 的身份?

node.js - 有没有办法从AWS S3到达 "npm install"?

amazon-web-services - 如何在AWS EKS中一次在多个容器上执行Shell脚本

docker - 无法使用 docker hub 上的私有(private) repo 验证 kubernetes secret ,所以我无法部署