web-dev-qa-db-ja.com

AWS EKSとAWS Fargateを使用してプライベートgithubパッケージからdockerイメージをプルする

AWSにkubernetesを使用してドッキングサービスをデプロイしたいと思います。そのために、最近リリースされたAWS EKSとAWS Fargate機能を使用しています。サービスのDockerイメージはgithubのプライベートパッケージに保存されます。

サービスをデプロイするには、シークレット、デプロイメント、サービスを含むkubernetesマニフェストファイルを使用しています。

minikubeでkubectlを使用してローカルにデプロイする場合、デプロイポッドはプライベートgithubパッケージからイメージを正常にプルします。プライベートdockerhubレジストリにアクセスするプロセスを正常に再現しました。

次に、eksクラスターに接続するようにkubectlを構成しました。 マニフェストファイルを適用すると、フォームgithubパッケージをプルするときにデプロイメントポッドのImagePullBackOffステータスを取得しますが、dockerhubからプルするときに正常に機能します。マニフェストファイルの違いは次のとおりです。

Githubパッケージのシークレットを生成する:

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のシークレットを生成:

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を試してみました。

私は次のように秘密の「mySecret」を作成しました:

{
  "username" : "myGithubUsername",
  "password" : "myGithubAccessToken"
}

次に、このシークレットにアクセスするためのポリシーを作成しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetSecretValue"
        ],
        "Resource": [
            "arn:aws:secretsmanager:eu-west-1:myAWSAccountId:secret:mySecret"
        ]
    }
  ]
}

次に、eksクラスターのクラスターIAMロールと、ファーゲートプロファイル「fp-default」で参照されるポッド実行ロールの両方にポリシーをアタッチしました。私はデフォルトのkubernetes名前空間でのみ作業しています。私の秘密とクラスターはどちらもeu-west-1リージョンにあります。

それでも、デプロイ時にImagePullBackOffステータスを取得しています。

私はAWS EKSでAWS Fargateを使用してこの問題に取り組む何かを見つけるのに苦労しており、これに関するいくつかの洞察を望んでいます:)

編集:問題は主にgithubパッケージをレジストリプロバイダーとして使用することに関連していることをより明確に示すために編集されました。

3
alx.lzt

少し掘り下げ、AWSの技術スタッフと交換した後:

問題は、EKS Fargateが内部でContainerdを使用していることです。

ContainerdとDockerは異なる方法でイメージをプルしようとします。 Containerdは現在、Dockerを正しくサポートするだけでOCI HTTP API V2をサポートしない複数のレジストリプロバイダーで複数の問題を追跡しています githubはそれらの1つです

Githubの製品責任者が 言及 として、問題は数週間から数か月で対処されます。

1
alx.lzt