IBMCloud:从Terraform访问容器注册表



我使用的是IBM Cloud及其Terraform提供程序。现在,我想从IBMCloudContainerRegistry中部署一个容器映像,并需要提供pull-secret。我如何使用Terraform做到这一点?

还要记住,您的集群可能已经有了合适的镜像拉取秘密。

默认情况下,新的IBM Cloud Kubernetes Service集群会获得一个包含凭据的机密(all-icr-io(,该凭据将允许读取与集群相同帐户拥有的IBM Cloud Container Registry命名空间中的所有映像。https://cloud.ibm.com/docs/containers?topic=containers-注册表#cluster_registry_auth_default

通过Terraform创建pull secret,然后使用它们从IBM云容器注册表中提取容器映像,通过一些配置是可能的。

首先,我有一个名为Docker_config.json:的Docker配置模板文件

{"auths":{"${docker-server}":{"username":"${docker-username}","password":"${docker-password}","email":"${docker-email}","auth":"${auth}"}}}

该文件引用自Terraform代码:

# template for container registry secrets
data "template_file" "docker_config_script" {
template = file("${path.module}/docker_config.json")
vars = {
docker-username = "iamapikey"
docker-password = var.ibmcloud_api_key
docker-server   = var.docker-server
docker-email    = var.docker-email
auth            = base64encode("iamapikey:${var.ibmcloud_api_key}")
}
}
# Create secrets to access IBM Container Registry to pull container image
resource "kubernetes_secret" "registry_secrets" {
metadata {
name      = "my-docker-registry"
namespace = var.iks_namespace
}
data = {
".dockerconfigjson" = data.template_file.docker_config_script.rendered
}
type = "kubernetes.io/dockerconfigjson"
}

上面的代码首先读取模板,并用环境变量或当前状态中的值填充它。之后,它创建了一个类型为docker configuration的Kubernetes secretmy docker registry。稍后,可以在部署配置中将该机密引用为image_pull_secret

以上是一种通用方法。根据您的帐户设置、该帐户中的个人用户和服务ID权限以及Kubernetes集群的创建方式,您可能可以使用预先创建的pull secret。请参阅IBM Cloud Kubernetes Service文档中的这一部分,了解如何授权从私有注册表中提取映像。

或者,您也可以按照以下步骤导入IKS集群附带的现有拉机密all-icr-io

主.tf

resource "kubernetes_secret" "all_icr_io" {
# (resource arguments)
}

供应商.tf

terraform {
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
version = "1.13.2"
}
}
}
provider "kubernetes" {
# Configuration options
}

在终端上:

terraform import kubernetes_secret.all_icr_io default/all-icr-io

要确认,

terraform show

结果:

# kubernetes_secret.all_icr_io:
resource "kubernetes_secret" "all_icr_io" {
data = (sensitive value)
id   = "default/all-icr-io"
type = "kubernetes.io/dockerconfigjson"
metadata {
annotations      = {}
generation       = 0
labels           = {}
name             = "all-icr-io"
namespace        = "default"
resource_version = "267"
self_link        = "/api/v1/namespaces/default/secrets/all-icr-io"
uid              = "0dea7ee0-ab03-4fc1-a4e4-b2xxxxxxx"
}
}

相关内容

  • 没有找到相关文章

最新更新