Strimzi 将容器加载到 aws ecr - 检查推送权限时出错

问题描述 投票:0回答:2

我通过 Strimzi 运算符在 Kubernetes 上运行 Apache Kafka。 我正在尝试使用 mysql debezium 连接器安装 Kafka Connect。

这是连接器配置文件:

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
  annotations:
    strimzi.io/use-connector-resources: "true"
spec:
  version: 3.1.0
  replicas: 1
  bootstrapServers: <bootstrap-server>
  config:
    group.id: connect-cluster
    offset.storage.topic: connect-cluster-offsets
    config.storage.topic: connect-cluster-configs
    status.storage.topic: connect-cluster-status
    config.storage.replication.factor: -1
    offset.storage.replication.factor: -1
    status.storage.replication.factor: -1
  build: 
    output: 
      type: docker
      image: <my-repo-in-ecr>/my-connect-cluster:latest
      pushSecret: ecr-secret
    plugins: 
    - name: debezium-mysql-connector
      artifacts:
      - type: tgz
        url: https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/1.9.0.Final/debezium-connector-mysql-1.9.0.Final-plugin.tar.gz

我以这种方式创建了 ecr-secret:

kubectl create secret docker-registry ecr-secret \
  --docker-server=${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com \
  --docker-username=AWS \
  --docker-password=$(aws ecr get-login-password) \
  --namespace=default

我得到的错误如下:

检查推送权限时出错——确保输入正确 标签名称,并且您已通过正确的身份验证,然后重试: 检查推送权限 “/我的连接集群:最新”: POST https:// │ │ 流关闭 EOF 为 默认/my-connect-cluster-connect-build (我的连接集群连接构建)

我不确定我应该检查什么权限。我已经尝试使用具有管理员权限的角色的 aws cli 配置来进行调试,但出现了相同的错误。有什么猜测吗?

docker kubernetes apache-kafka apache-kafka-connect amazon-ecr
2个回答
3
投票

我认为 EKS 集群中的节点缺少某些角色,但事实并非如此,因为唯一需要进行身份验证的是密钥中包含的信息。

错误实际上是在秘密创建中:两个细节非常相关:

  1. aws ecr get-login-password 命令中的 --region 标志丢失,因此生成了不同的密码。
  2. docker-server 前面需要 https://

在秘密生成的正确命令下方。

kubectl create secret docker-registry ecr-secret \
  --docker-server=https://${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com \
  --docker-username=AWS \
  --docker-password=$(aws ecr get-login-password --region eu-central-1) \
  --namespace=default

0
投票

只需添加这段代码,以防有人发现同样的问题。 我建议利用 IRSA 注入 iam 角色,这样您就不必使用 docker 密码创建密钥。

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: kafka
  annotations:
    strimzi.io/use-connector-resources: "true"
spec:
  version: 3.7.0
  replicas: 1
  bootstrapServers: ...
  authentication:
    ...
  template:
    serviceAccount:
      metadata:
        annotations:
          eks.amazonaws.com/role-arn: arn:aws:iam::123456789010:role/data-kafka-connect
    buildServiceAccount:
      metadata:
        annotations:
          eks.amazonaws.com/role-arn: arn:aws:iam::123456789010:role/data-kafka-connect-build

然后,将所需的 ECR 权限添加到

data-kafka-connect-build
角色,您应该能够推送到 ECR,而无需使用临时 docker 机密。

© www.soinside.com 2019 - 2024. All rights reserved.