kubernetes 由于缺少区域,无法使用交叉平面创建IAM角色

jmp7cifd  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(98)

我正在使用Crossplane和Kubernetes作为配置AWS基础设施的一种方式。使用ArgoCD自动部署资源。AWS资源正在使用provider-aws@v0.40.0进行调配。
我面临的问题是,当我尝试创建任何IAM资源时,例如RoleRolePolicyAttachmentPolicyOpenIDConnectProvider,资源的创建失败,引用的原因是因为缺少提供的区域。
下面是创建Role失败的消息:

failed to get Role with name: operation error IAM: GetRole, failed to resolve service endpoint, an AWS region is required, but was not found

字符串
使用此清单:

apiVersion: iam.aws.crossplane.io/v1beta1
kind: Role
metadata:
  name: test-role
spec:
  providerConfigRef:
    name: aws
  forProvider:
    assumeRolePolicyDocument: |
      {
        // redacted
      }


请注意,无法将区域传递到Role图表中,如documented here。也没有办法在ProviderConfig中提供区域。
IAM的服务端点也是does not contain a region,因为它是全局的。
AWS API文档还建议不需要提供区域来进行GetRole调用。
这个错误表明需要一个区域,但是似乎不需要它来提供资源,并且我没有办法向Crossplane提供一个区域。我希望我所拥有的应该工作。请注意,使用我正在使用的Crossplane设置可以提供具有区域字段的其他资源。

7jmck4yq

7jmck4yq1#

一种解决方法是在ControllerConfig声明中提供一个AWS_REGION环境变量。举例来说:

kind: ControllerConfig
metadata:
  name: aws-config
spec:
  args: ['-d']
  env:
  - name: AWS_REGION
    value: us-east-1
---
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: crossplane-provider-aws
spec:
  package: crossplane/provider-aws:v0.32.0
  controllerConfigRef:
    name: aws-config

字符串
答案来自provider-aws repo上的this Github issue,它讨论了同样的问题。

相关问题