我通过 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 配置来进行调试,但出现了相同的错误。有什么猜测吗?
我认为 EKS 集群中的节点缺少某些角色,但事实并非如此,因为唯一需要进行身份验证的是密钥中包含的信息。
错误实际上是在秘密创建中:两个细节非常相关:
在秘密生成的正确命令下方。
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
只需添加这段代码,以防有人发现同样的问题。 我建议利用 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 机密。