Configurar Módulos Terraform

Los recursos necesarios para esta solución se definen en módulos de Terraform.

Antes de Empezar

Antes de empezar a configurar los módulos de Terraform, realice los siguientes pasos:

  1. Aprenda los conceptos básicos de Terraform.

    Como mínimo, lea la introducción en la documentación de Terrraform.

  2. Mantenga la siguiente información lista:
    • OCID del arrendamiento.

      Puede encontrar el OCID de su arrendamiento en la consola web de Oracle Cloud Infrastructure. Seleccione Administración en el menú Servicios y, a continuación, haga clic en Detalles de arrendamiento.

    • OCID del usuario que desea que utilice Terraform para la autenticación con Oracle Cloud Infrastructure.

      Para buscar el OCID del usuario, seleccione Identidad en el menú Servicios y, a continuación, seleccione Usuarios. Localice su nombre de usuario en la lista y copie su OCID.

    • OCID del compartimento en el que desea crear los recursos.

      Para buscar el OCID de un compartimento, seleccione Identidad en el menú Servicios y, a continuación, seleccione Compartimentos. Localice el compartimento que necesita en la lista y copie su OCID.

    • Identificador de la región en la que desea crear los recursos.

      Por ejemplo, el ID de la región US East (Ashburn) es us-ashburn-1.

      Consulte Regiones y dominios de disponibilidad.

  3. Decida lo siguiente:
    • OCID de las imágenes que desea utilizar para los hosts de base y administración.
      La imagen por defecto definida en la configuración de Terraform para el host de base es una imagen de Linux autónoma de Oracle. Si desea utilizar una imagen diferente, identifique el OCID de la imagen que necesita.
      • Para buscar el OCID de una imagen personalizada, inicie sesión en la consola web de Oracle Cloud Infrastructure, seleccione Calcular en el menú de servicio y, a continuación, seleccione Imágenes personalizadas.
      • Para buscar el OCID de una imagen proporcionada por Oracle, realice los siguientes pasos:
        1. Vaya a Imágenes de Oracle Cloud.
        2. En el panel de navegación de la izquierda, seleccione una familia de imágenes (por ejemplo, Oracle Linux 7. x ).
        3. En la página resultante, desplácese hasta la versión de la imagen que desea utilizar y haga clic en ella (por ejemplo, Oracle- Linux-7.7-2019.09.25-0 ).
        4. En la página resultante, desplácese hacia abajo hasta la sección OCIDs de imagen.
        5. Copie el OCID correspondiente a la región donde desea crear el host de base.

          El OCID de imagen contiene el ID de la región en la que se puede utilizar la imagen. Por ejemplo, el OCID de las imágenes de la región Alemania Central (Frankfurt) estaría en el formato ocid1.image.oc1.eu-frankfurt-1.aaaaaaaaxxx… Asegúrese de copiar el OCID de la imagen para la región en la que desea crear los recursos.

    • Zona horaria de los hosts bastion y admin.

      En sistemas similares a UNIX, puede obtener una lista de las zonas horarias ejecutando el comando: timedatectl list-timezones

    • Unidad de computación que se utilizará para el host de base, el host de administración y los nodos de trabajador de Kubernetes.

      Consulte Compute Shapes.

  4. Complete los requisitos previos para la creación de clusters de Kubernetes en Oracle Cloud Infrastructure. Consulte Preparing for Container Engine for Kubernetes.
  5. (Opcional) Este paso es necesario si desea extraer imágenes de aplicaciones contenedorizadas de un repositorio privado de Oracle Cloud Infrastructure Registry.
    1. Genere un token de autenticación para el nombre de usuario que se debe utilizar para extraer imágenes de Oracle Cloud Infrastructure Registry. Consulte Getting an Auth Token.
    2. Almacene el token de autenticación que ha generado como secreto en Oracle Cloud Infrastructure Vault. Consulte Administración de secretos.

Descarga del código Terraform

El código Terraform de esta solución está disponible en GitHub.

  1. En el panel de navegación de la izquierda, haga clic en Descargar código.
  2. Haga clic en Representante de Git.
  3. Clone o descargue el repositorio en su computadora local.

Acerca de Terraform Code

El código Terraform de esta solución se organiza en módulos reutilizables, cada uno con los recursos para un componente específico de la topología de destino.

La codificación de los recursos en la nube en los archivos de configuración de Terraform permite provisionar la topología de forma rápida y gestionar los recursos de forma eficaz.

El código Terraform contiene los siguientes directorios y archivos en el nivel superior:
  • docs directory y *.adoc: documentación para el código. Toda la información y las instrucciones necesarias se incluyen en la documentación que está leyendo ahora. No necesitará consultar la documentación incluida en el código.
  • *.tf: archivos de configuración de Terraform que utiliza la solución. No edite estos archivos.
  • terraform.tfvars.example: plantilla que utilizará para crear el archivo de variables de Terraform. No edite ni elimine la plantilla. Copiarla en terraform.tfvars
  • modules: Directorios que contienen las configuraciones principales de Terraform para los recursos creados con esta solución. No los edite.
  • .github directory y .gitignore: archivos de configuración internos de Github. No los edite.

Configuración de las variables de Terraform

Especifique los parámetros necesarios para que Terraform se conecte al arrendamiento de Oracle Cloud Infrastructure. Especifique también los parámetros de red, los atributos del host de base y del host de administración, así como la configuración de Kubernetes.

  1. En el directorio de nivel superior del código que ha descargado o clonado, cree un archivo de texto sin formato denominado provider.tf que contenga el siguiente código:
    provider "oci" {
      tenancy_ocid         = var.tenancy_id
      user_ocid            = var.user_id
      fingerprint          = var.api_fingerprint
      private_key_path     = var.api_private_key_path
      region               = var.region
      disable_auto_retries = var.disable_auto_retries
    }
  2. Localice el archivo terraform.tfvars.example en el directorio de nivel superior del código que ha descargado o clonado y cópielo en terraform.tfvars

    Nota:

    Para gestionar los recursos en varios arrendamientos, mantenga un archivo terraform.tfvars independiente para cada arrendamiento.
  3. Asegúrese de haber completado los requisitos descritos anteriormente. Consulte Before You Begin.
  4. Abra terraform.tfvars en un editor de texto sin formato y defina valores para las variables de la siguiente forma:
    Variable Descripción
    api_fingerprint (necesario) Huella de la clave de firma de API que ha cargado.
    api_private_key_path (necesario) Ruta de acceso completa y nombre del archivo que contiene su clave de firma de API privada.
    compartment_id (necesario) OCID del compartimento en el que desea crear los recursos.
    tenancy_id (necesario) OCID del arrendamiento.
    user_id (necesario) OCID del usuario que desea que utilice Terraform para la autenticación con Oracle Cloud Infrastructure.
    ssh_private_key_path Ruta de acceso completa y nombre del archivo que contiene la clave SSH privada correspondiente a la clave pública que desea proporcionar para el host de base.

    Este valor se utiliza para construir el comando ssh que puede utilizar para acceder al host de base. El comando ssh se muestra en la salida al aplicar la configuración de Terraform. Tenga en cuenta que Terraform no lee ni copia la clave privada.

    ssh_public_key_path Ruta de acceso completa y nombre del archivo que contiene la clave SSH pública que desea proporcionar para el host de base.
    label_prefix Un identificador corto, que se desea utilizar como prefijo en los nombres de los recursos.

    Use una cadena que le ayude a identificar la finalidad o la naturaleza de los recursos consultando sus nombres. Por ejemplo, si desea utilizar la configuración de Terraform para configurar un entorno de prueba o almacenamiento en zona intermedia, utilice el prefijo test o staging.

    Región Identificador de la región en la que desea crear los recursos.

    Por ejemplo, el ID de la región US East (Ashburn) es us-ashburn-1.

    nat_gateway_enabled Especifique true para crear un gateway de NAT para VCN.

    Se necesita un gateway de NAT si cualquiera de las instancias informáticas privadas (como el host de administración o los nodos de trabajador de Kubernetes) necesita acceder a los hosts en Internet público.

    newbits y netnum Al aplicar la configuración, Terraform transfiere los valores de newbits y netnum como argumentos a la función Terraform cidrsubnet(). Esta función calcula los prefijos CIDR de las subredes del host bastion, el host admin, los nodos del equilibrador de carga y los nodos trabajadores de Kubernetes.
    • newbits se utiliza para determinar el tamaño de la subred. Se trata de la diferencia entre la máscara de red de VCN y la máscara de red necesaria para la subred de la base.

      Por ejemplo, para crear una subred con la máscara de red /29 en un VCN /16, especifique 13 como valor newbits (es decir, 29 menos 16).

      Un valor newbits inferior da como resultado una subred con un espacio de dirección más grande.

    • netnum se utiliza para determinar los límites de la subred. Se trata del índice basado en cero de la subred cuando la red se enmascara con newbits.

      Si continúa con el ejemplo anterior, si especifica newbits=13 y netnum=0, la función cidrsubnet() devuelve el prefijo de CIDR de subred 10.0.0.0/29, que es el primer espacio de direcciones /29 en el VCN 10.0.0.0/16.

    Valores por defecto:
    netnum = {
      admin   = 33
      bastion = 32
      int_lb  = 16
      pub_lb  = 17
      workers = 1
    }
    
    newbits = {
      admin   = 13
      bastion = 13
      lb      = 11
      workers = 2
    }
    Si deja estas variables en los valores predeterminados y especifica 10.0.0.0/16 como rango CIDR para VCN, la función cidrsubnet() de Terraform calcula los siguientes prefijos CIDR para las subredes. Las direcciones disponibles se muestran entre paréntesis. Tenga en cuenta que las dos primeras direcciones y la última dirección de una subred están reservadas por el servicio de red.
    • Subred de la base: 10.0.1.0/29 (direcciones disponibles: 10.0.1.2 a 10.0.1.6; es decir, 5 hosts)
    • Subred de administración: 10.0.1.8/29 (10.0.1.10 a 10.0.1.14; 5 hosts)
    • Subred del equilibrador de carga interno: 10.0.2.0/27 (10.0.2.2 a 10.0.2.30; 29 nodos)
    • Subred del equilibrador de carga público: 10.0.2.32/27 (10.0.2.34 a 10.0.2.62; 29 nodos)
    • Subred de nodos de trabajador de Kubernetes: 10.0.64.0/18 (10.0.64.2 a 10.0.127.254; 16381 nodos)

    Si necesita subredes con diferentes direcciones o tamaños que los valores por defecto, debe determinar los valores adecuados para newbits y netnum. Para ello, debe tener conocimientos básicos sobre las direcciones IP sin clase. Consulte también la documentación de Terraform para la función cidrsubnet().

    Asegúrese de que los bloques CIDR que especifique aquí no se superpongan con el bloque CIDR especificado para el pods de Kubernetes (pods_cidr).

    service_gateway_enabled Especifique true para crear un gateway de servicios para VCN.

    Se necesita un gateway de servicio si las instancias informáticas de VCN necesitan acceder a otros servicios de Oracle como Oracle Cloud Infrastructure Object Storage.

    vcn_cidr Bloque IPv4 CIDR que puede elegir para VCN.

    El valor por defecto es 10.0.0.0/16. El rango permitido es de /16 a /30

    Asegúrese de que el bloque CIDR especificado aquí no se superponga con el bloque CIDR especificado para los servicios de Kubernetes (services_cidr).

    vcn_dns_label Prefijo de nombre para el nombre DNS interno de VCN.

    El nombre que especifique aquí tiene como prefijo oraclevcn.com para formar el nombre de dominio de DNS de VCN. Por ejemplo, si especifica oke como prefijo, el nombre de dominio de DNS de VCN sería oke.oraclevcn.com

    vcn_name Nombre del recurso VCN.
    bastion_access Rango de direcciones IP (en notación CIDR) desde las que se debe permitir el acceso SSH a la base.

    Para permitir el acceso SSH desde cualquier host (es decir, 0.0.0.0/0), deje la variable en su valor por defecto, ANYWHERE.

    bastion_enabled Especifique true para crear un host de base.
    bastion_image_id OCID de la imagen que se va a utilizar para crear el host de base.

    Si deja esta variable en el valor por defecto, NONE , se utiliza una imagen Oracle Autonomous Linux.

    bastion_notification_enabled Puede utilizar el servicio de notificación de Oracle Cloud Infrastructure para recibir mensajes de estado del host de base cuando se aplican actualizaciones o cuando Oracle Ksplice detecta un intento de explotación conocido.
    Especifique true para activar el envío de notificaciones para el host de base.

    Nota:

    El código Terraform de esta solución configura las notificaciones del host de base solo cuando utiliza la imagen por defecto de Oracle Autonomous Linux.
    bastion_notification_endpoint Dirección de correo electrónico a la que se deben enviar las notificaciones. Esta variable es necesaria si define bastion_notification_enabled en true.
    bastion_notification_protocol Defina esta variable en EMAIL.
    bastion_notification_topic Nombre del tema de notificación que se va a crear. Esta variable es necesaria si define bastion_notification_enabled en true.
    bastion_package_upgrade Especifique true si desea que los paquetes de seguridad del host de base se actualicen la primera vez que se inicie el host.

    Tenga en cuenta que cuando esta variable se define en true, una vez provisionado el host de base, no estará disponible durante un período corto mientras se actualicen los paquetes de seguridad. Sin embargo, al activar esta actualización se minimizan las vulnerabilidades del host de bastion.

    bastion_shape Forma de cálculo que desea utilizar para el host de base.
    bastion_timezone Zona horaria que se debe configurar para el host de bastion, en el formato de zona horaria IANA (por ejemplo, America/Los_Angeles).
    admin_enabled Especifique true para crear un host de administración.
    admin_image_id OCID de la imagen que se va a utilizar para crear el host de base.

    Si deja esta variable en el valor por defecto, se utilizará NONE, se utilizará una imagen Linux proporcionada por Oracle.

    admin_instance_principal Especifique true si desea activar el host de administración para gestionar todos los recursos del compartimento que especifique.
    Use esta función si tiene previsto ejecutar comandos de la CLI o realizar llamadas de la API desde el host de administración para gestionar recursos en la topología.

    Nota:

    Cualquier usuario que pueda conectarse a una instancia informática con SSH hereda los privilegios instance-principal otorgados a la instancia. Considere esto cuando decida designar el host de administración como principal de instancia. Puede desactivar o activar esta función en cualquier momento sin que afecte al host de administración.

    Si define esta variable en true, el host admin será miembro de un grupo dinámico y se creará una sentencia de política para permitir que el grupo dinámico gestione todos los recursos en el compartimento.

    admin_notification_enabled

    admin_notification_endpoint

    admin_notification_protocol

    admin_notification_topic

    Deje estas variables en los valores por defecto. La activación de notificaciones para el host de administración no está soportada actualmente en este código Terraform.
    admin_package_upgrade Especifique true si desea que los paquetes de seguridad del host de administración se actualicen la primera vez que se inicie el host.

    Tenga en cuenta que cuando esta variable se define en true, una vez provisionado el host de administración, no estará disponible durante un período corto mientras se actualicen los paquetes de seguridad. Sin embargo, al activar esta actualización se minimizan las vulnerabilidades del host de administración.

    admin_shape Forma de cálculo que desea utilizar para el host de administración.
    admin_timezone La zona horaria que se debe configurar para el host de administración, en el formato de zona horaria IANA (por ejemplo, America/Los_Angeles).
    availability_domains El dominio de disponibilidad en el que desea aprovisionar los hosts de administración y de base.

    Por ejemplo, para aprovisionar el host de base en el segundo dominio de disponibilidad, defina bastion = 2.

    Si la región especificada sólo contiene un dominio de disponibilidad, deje esta variable en su valor por defecto, 1.

    tagging Especifique las etiquetas que desea asignar a los recursos de cálculo y de red.
    allow_node_port_access Especifique true si desea permitir el tráfico TCP a los nodos de trabajador de Kubernetes cuando se desplieguen en el modo público.
    allow_worker_ssh_access Especifique true si desea permitir conexiones SSH a los nodos trabajadores de Kubernetes mediante el host de base.

    Tenga en cuenta que incluso si los nodos de trabajador se implementan en el modo público, las conexiones SSH deben pasar por el host de base.

    Si define esta variable en true, debe definir también bastion_enabled = true.

    cluster_name Nombre para el cluster de Kubernetes.
    dashboard_enabled Especifique true si desea que se cree el panel de control de Kubernetes por defecto.
    kubernetes_version Versión de Kubernetes que se usará para los nodos de trabajador.

    Si deja esta variable en su valor por defecto, LATEST, se selecciona la última versión soportada. Para utilizar una versión específica, especifique dicha versión.

    node_pools El número de agrupaciones de nodos que se crearán, el tamaño de cada agrupación y la forma de cálculo que se utilizará para los nodos de trabajador, en el siguiente formato:
    node_pools = {
      "np1" = ["computeShape", numberOfNodes]
      "np2" = ["computeShape", numberOfNodes]
      "np3" = ["computeShape", numberOfNodes]
      ...
    }
    • np1, np2 y np3 son nombres arbitrarios que representan agrupaciones de nodos individuales.
    • computeShape es la forma de cálculo que se utilizará para los nodos de trabajador en el grupo.
    • numberOfNodes es el número de nodos de trabajador de Kubernetes que se crearán en el grupo. Se crea un mínimo de tres nodos en cada agrupación, aunque especifique un valor inferior.
    En el siguiente ejemplo, se usa un cluster compuesto por dos agrupaciones, cada una con una unidad de computación diferente que contiene un número diferente de nodos trabajadores de Kubernetes:
    node_pools = {
      "np1" = ["VM.Standard2.1", 3]
      "np2" = ["VM.Standard2.2", 5]
    }
    node_pool_name_prefix Prefijo de nombre para los pools de nodos.

    Los nombres de los pools de nodos se generan concatenando los valores de label_prefix, node_pool_name_prefix y el número de pool de nodos. Por ejemplo, si especifica label_prefix = "prod" y node_pool_name_prefix = "np", los nombres generados de los grupos de nodos serían prod-np-1, prod-np-2, prod-np-3, etc.

    node_pool_image_id OCID de la imagen que se utilizará para los nodos de trabajador de Kubernetes.

    Si deja esta variable en el valor por defecto, se utilizará NONE, una imagen que coincida con los valores especificados para node_pool_os y node_pool_os_version.

    node_pool_os Sistema operativo que se debe utilizar para los nodos de trabajador de Kubernetes (por ejemplo, "Oracle Linux").

    Este valor sólo se tiene en cuenta si define node_pool_image_id = "NONE"

    node_pool_os_version Versión del sistema operativo que se debe utilizar para los nodos de trabajador de Kubernetes (por ejemplo, "7.7").

    Este valor sólo se tiene en cuenta si define node_pool_image_id = "NONE"

    pods_cidr Bloque IPv4 CIDR que puede elegir para los pods de Kubernetes.

    Asegúrese de que el bloque CIDR especificado aquí no se superponga con el bloque CIDR especificado para VCN (vcn_cidr).

    services_cidr Bloque IPv4 CIDR que puede elegir para los pods de Kubernetes.

    Asegúrese de que el bloque CIDR especificado aquí no se superponga con el bloque CIDR especificado para VCN (vcn_cidr).

    worker_mode Especifique public si los nodos de trabajador deben ser accesibles desde Internet. De lo contrario, defina esta variable en private.

    Si define worker_mode = "private", defina nat_gateway_enabled = true

    lb_subnet_type y preferred_lb_subnets Los valores que especifique para lb_subnet_type y preferred_lb_subnets determinan el tipo de subredes que se deben utilizar para los nodos de equilibrio de carga que despliegue mediante el servicio Kubernetes de tipo LoadBalancer.

    Los equilibradores de carga públicos tienen direcciones IP públicas. Los equilibradores de carga internos sólo tienen direcciones IP privadas y no se puede acceder desde Internet públicas.

    • Si pretende utilizar equilibrios de carga públicos, defina preferred_lb_subnet = "public" y subnet_type en "both" o "public"
    • Si tiene previsto utilizar equilibrios de carga internos, defina preferred_lb_subnet = "internal" y subnet_type en "both" o "internal"

      Incluso si define que las subredes del equilibrador de carga sean internas, debe definir las anotaciones adecuadas (como service.beta.kubernetes.io/oci-load-balancer-internal: "true") al crear servicios de equilibrador de carga internos. La definición de forma de fusionar las subredes como privadas no es suficiente.

      Para obtener información sobre la creación de equilibradores de carga internos, consulte la documentación de Oracle Cloud Infrastructure.

    secret_id ID del secreto en el servicio Oracle Cloud Infrastructure Vault, donde se almacena el token de autenticación que se va a utilizar para extraer imágenes de aplicación de Oracle Cloud Infrastructure Registry.
    También debe definir lo siguiente:
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    email_address Dirección de correo electrónico que se utilizará al generar el secreto de Docker. Se necesita una dirección de correo electrónico, pero no importa la que especifique.

    Esta variable es necesaria si especifica secret_id.

    tenancy_name Espacio de nombres Oracle Cloud Infrastructure Object Storage del arrendamiento que contiene el registro desde el que se deben extraer imágenes para despliegues en el cluster de Kubernetes.

    Esta variable es necesaria si especifica secret_id.

    username Nombre de usuario para el que ha generado el token de autenticación almacenado en secret_id.

    Esta variable es necesaria si especifica secret_id.

    install_helm Especifique true si desea instalar Helm.

    Helm es un gestor de paquetes para Kubernetes.

    Para instalar Helm, debe definir también admin_instance_principal = true.

    helm_version Versión del cliente Helm que se va a instalar.

    Tiller (el equivalente del servidor de Helm) se actualiza automáticamente.

    install_calico Especifique true si desea que se instale Calico.

    Puede utilizar Calico para implementar políticas de red para contenedores de cargas de trabajo desplegadas en clusters de Kubernetes.

    Si define install_calico = true, debe definir también lo siguiente:
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    calico_version Versión de Calico que se va a instalar.
    install_metricserver Especifique true si desea instalar el servidor de métricas de Kubernetes.

    Por defecto, la última versión se instala en el espacio de nombres kube-system. Kubernetes Metrics Server agrega datos de uso de recursos a través de un cluster.

    Si define install_metricserver = true, debe definir también lo siguiente:
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    use_encryption Si desea utilizar el servicio Oracle Cloud Infrastructure Vault para cifrar los secretos de Kubernetes, defina esta variable en true.
    Si define use_encryption = true, debe definir también lo siguiente:
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    existing_key_id OCID de una clave existente creada en el servicio Oracle Cloud Infrastructure Vault.

    Esta variable es necesaria si define use_encryption en true.

    create_service_account Si desea que los procesos y herramientas externos (como un pipeline de integración y despliegue) accedan al cluster, defina esta variable en true. Una cuenta de servicio se crea con su propio token de autenticación.
    Si define create_service_account = true, debe definir también lo siguiente:
    bastion_enabled = true
    admin_enabled = true
    admin_instance_principal = true
    service_account_name Nombre de la cuenta de servicio que se va a crear.
    service_account_namespace Espacio de nombres Kubernetes en el que se debe crear la cuenta.
    service_account_cluster_role_binding Nombre del enlace de rol de cluster para la cuenta de servicio.

    A continuación se muestra un ejemplo de un archivo terraform.tfvars terminado.

    # Identity and access parameters
    
    api_fingerprint = "d4:dc:...(truncated)"
    
    api_private_key_path = "/home/joe/.oci/oci_api_key.pem"
    
    compartment_id = "ocid1.compartment.oc1..aaaaaaaaxxx... (truncated)"
    
    tenancy_id = "ocid1.tenancy.oc1..aaaaaaaaxxx... (truncated)"
    
    user_id = "ocid1.user.oc1..aaaaaaaaxxx... (truncated)"
    
    ssh_private_key_path = "/home/joe/.ssh/id_rsa"
    
    ssh_public_key_path = "/home/joe/.ssh/id_rsa.pub"
    
    # general oci parameters
    label_prefix = "prod"
    
    region = "us-phoenix-1"
    
    # networking
    
    nat_gateway_enabled = true
    
    netnum = {
      admin   = 33
      bastion = 32
      int_lb  = 16
      pub_lb  = 17
      workers = 1
    }
    
    newbits = {
      admin   = 13
      bastion = 13
      lb      = 11
      workers = 2
    }
    
    service_gateway_enabled = true
    
    vcn_cidr = "10.0.0.0/16"
    
    vcn_dns_label = "oke"
    
    vcn_name = "oke vcn"
    
    # bastion
    
    bastion_access = "ANYWHERE"
    
    bastion_enabled = true
    
    bastion_image_id = "NONE"
    
    bastion_notification_enabled = true
    
    bastion_notification_endpoint = "joe@example.com"
    
    bastion_notification_protocol = "EMAIL"
    
    bastion_notification_topic = "bastion_server_notification"
    
    bastion_package_upgrade = true
    
    bastion_shape = "VM.Standard.E2.1"
    
    bastion_timezone = "America/Los_Angeles"
    
    admin_enabled = true
    
    admin_image_id = "NONE"
    
    admin_instance_principal = true
    
    admin_notification_enabled = false
    
    admin_notification_endpoint = "joe@example.com"
    
    admin_notification_protocol = "EMAIL"
    
    admin_notification_topic = "admin_server_notification"
    
    admin_package_upgrade = true
    
    admin_shape = "VM.Standard.E2.1"
    
    admin_timezone = "America/Los_Angeles"
    
    # availability_domains
    
    availability_domains = {
      bastion = 1
      admin   = 1
    }
    
    tagging = {
      computetag = {"Environment" = "dev" }
      networktag = { "Name" = "network" }
    }
    
    # oke
    
    allow_node_port_access = false
    
    allow_worker_ssh_access = false
    
    cluster_name = "oke"
    
    dashboard_enabled = true
    
    kubernetes_version = "LATEST"
    
    node_pools = {
      np1 = ["VM.Standard2.1", 3]
      #np2 = ["VM.Standard2.8", 4]
      #np3 = ["VM.Standard1.4", 5]
    }
    
    node_pool_name_prefix = "np"
    
    node_pool_image_id = "NONE"
    
    node_pool_os = "Oracle Linux"
    
    node_pool_os_version = "7.7"
    
    pods_cidr = "10.244.0.0/16"
    
    services_cidr = "10.96.0.0/16"
    
    worker_mode = "private"
    
    # oke load balancers
    
    lb_subnet_type = "public"
    
    preferred_lb_subnets = "public"
    
    # ocir
    
    secret_ocid = "ocid1.key.oc1..aaaaaaaaxxx... (truncated)"
    
    email_address = "joe@example.com"
    
    tenancy_name = "mytenancy"
    
    username = "joe_k8s_admin"
    
    # helm
    
    helm_version = "3.0.0"
    
    install_helm = false
    
    # calico
    
    calico_version = "3.9"
    
    install_calico = false
    
    # metrics server
    
    install_metricserver = false
    
    use_encryption = false
    
    existing_key_id = ""
    
    # service accountcreate_service_account = true
    service_account_name = "kubeconfigsa"
    service_account_namespace = "kube-system"
    service_account_cluster_role_binding = "myapps-manage-binding"
  5. Guarde y cierre terraform.tfvars.