如何在Rails配置初始化器中访问kubernetes注入的env变量?

时间:2019-12-16 20:22:16

标签: ruby-on-rails amazon-web-services docker kubernetes

我们正在用新的身份验证机制https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/取代AWS Access密钥和机密

因此,现在我们有了AWS_ROLE_ARN和AWS_WEB_IDENTITY_TOKEN_FILE env变量,它们将在创建pod时注入,因此这些变量不存在于配置映射中。 我们有一个带配置初始化程序的Rails应用程序,在其中我们使用了这些变量,但部署失败并显示错误“找不到密钥”。 为了解决这个问题,我们在配置映射中添加了具有伪数据的键,考虑到一旦部署pod,变量值将被覆盖。找不到关键密钥的问题已通过此hack修复,但出现错误

Missing :web_identity_token_file parameter or invalid file path provided for Aws::AssumeRoleWebIdentityCredentials provider

我的理解是,应用程序在容器中初始化,然后将其部署到pod中,但是只有在将容器添加到pod中时变量才可用。 我可以用这种方法在kubernetes中解决这个问题吗?还是需要从初始化程序中移出我的应用程序代码,并且仅在向AWS发出实际请求时才使用它?

注意:我是kubernetes的新手。

编辑 Ruby代码

Client.configure do |config|
  config.credentials = Aws::AssumeRoleWebIdentityCredentials.new(
    client: Aws::STS::Client.new(region: 'us-west-2'),
    role_arn: ENV.fetch('AWS_ROLE_ARN'),
    web_identity_token_file: ENV.fetch('AWS_WEB_IDENTITY_TOKEN_FILE')
  )

secrets.yml

apiVersion: v1
kind: Secret
metadata:
  name: "${NAME}-secrets"
  namespace: "${NAMESPACE}"
data:
  AWS_ROLE_ARN: "${AWS_ROLE_ARN}"
  AWS_WEB_IDENTITY_TOKEN_FILE: "${AWS_WEB_IDENTITY_TOKEN_FILE}"

0 个答案:

没有答案