Exemples de scripts Terraform pour les ressources réseau (superposition de canal)
Sur Compute Cloud@Customer, vous pouvez utiliser des scripts Terraform pour automatiser la création de ressources réseau OKE pour le réseau superposé Flannel.
Les scripts Terraform suivants créent les ressources réseau requises par Kubernetes Engine (OKE) lorsque vous utilisez le réseau de superposition Flannel. Les sections suivantes de cette rubrique présentent d'autres façons de définir ces mêmes ressources réseau.
La plupart des valeurs affichées dans ces scripts, telles que les noms d'affichage des ressources et les CIDR, sont des exemples. Certains ports doivent être spécifiés comme indiqué (reportez-vous à la section Workload Cluster Network Ports (Flannel Overlay)) et le sous-réseau du plan de contrôle OKE doit être nommé control-plane
. Pour obtenir des commentaires sur les valeurs CIDR, reportez-vous à Plages CIDR réseau de cluster de charge globale (superposition de canal).
Exemples de scripts Terraform
- variables.tf
- terraform.tfvars
- provider.tf
- main.tf
- oke_vcn.tf
- oke_worker_seclist.tf
- oke_worker_subnet.tf
- oke_kmi_seclist.tf
- oke_kmi_subnet.tf
variables.tf
Ce fichier crée plusieurs variables qui sont utilisées pour configurer les ressources réseau OKE lorsque vous utilisez le réseau de superposition Flannel. Beaucoup de ces variables ne se voient pas affecter de valeurs dans ce fichier. Des valeurs sont affectées à un port et cinq CIDR. kubernetes_api_port
, port 6443, est le port utilisé pour accéder à l'API Kubernetes. Voir aussi Workload Cluster Network Ports (Flannel Overlay). Les cinq CIDR définis dans ce fichier sont pour le VCN OKE, le sous-réseau de processus actif, le sous-réseau d'équilibreur de charge de processus actif, le sous-réseau de plan de contrôle et le sous-réseau d'équilibreur de charge de plan de contrôle.
variable "oci_config_file_profile" {
type = string
default = "DEFAULT"
}
variable "tenancy_ocid" {
description = "tenancy OCID"
type = string
nullable = false
}
variable "compartment_id" {
description = "compartment OCID"
type = string
nullable = false
}
variable "vcn_name" {
description = "VCN name"
nullable = false
}
variable "kube_client_cidr" {
description = "CIDR of Kubernetes API clients"
type = string
nullable = false
}
variable "public_ip_cidr" {
description = "Public IP CIDR"
type = string
nullable = false
}
variable "kubernetes_api_port" {
description = "Port used for Kubernetes API"
type = string
default = "6443"
}
variable "vcn_cidr" {
default = "172.31.252.0/23"
}
# Subnet for KMIs where kube-apiserver and other control
# plane applications run, max 9 nodes
variable "kmi_cidr" {
description = "Kubernetes control plane subnet CIDR"
default = "172.31.252.224/28"
}
# Subnet for KMI load balancer
variable "kmilb_cidr" {
description = "Kubernetes control plane LB subnet CIDR"
default = "172.31.252.240/28"
}
# Subnet for worker nodes, max 128 nodes
variable "worker_cidr" {
description = "Kubernetes worker subnet CIDR"
default = "172.31.253.0/24"
}
# Subnet for worker load balancer (for use by CCM)
variable "workerlb_cidr" {
description = "Kubernetes worker LB subnet CIDR"
default = "172.31.252.0/25"
}
# Flag to Enable private endpoint
variable "enable_private_endpoint" {
description = "Flag to create private control plane endpoint/service-lb"
type = bool
default = false
nullable = false
}
terraform.tfvars
Ce fichier affecte des valeurs à certaines des variables créées dans variables.tf
.
# name of the profile to use from $HOME/.oci/config
oci_config_file_profile = "DEFAULT"
# tenancy ocid from the above profile
tenancy_ocid = "tenancy_OCID"
# compartment in which to build the OKE cluster
compartment_id = "compartment_OCID"
# display-name for the OKE VCN
vcn_name = "oketest"
provider.tf
Ce fichier est requis pour utiliser le fournisseur OCI. Le fichier initialise le module OCI à l'aide du fichier de configuration de profil OCI.
provider "oci" {
config_file_profile = var.oci_config_file_profile
tenancy_ocid = var.tenancy_ocid
}
main.tf
Ce fichier indique le fournisseur à utiliser (oracle/oci
), définit plusieurs règles de liste de sécurité et initialise les variables locales requises.
La version du fournisseur OCI que vous utilisez doit être au moins v4.50.0 mais pas supérieure à v6.36.0.
terraform {
required_providers {
oci = {
source = "oracle/oci"
version = ">= 4.50.0, <= 6.36.0"
# If necessary, you can pin a specific version here
#version = "4.71.0"
}
}
required_version = ">= 1.1"
}
locals {
kube_internal_cidr = "253.255.0.0/16"
worker_lb_ingress_rules = [
{
source = var.kube_client_cidr
port_min = 80
port_max = 80
},
{
source = var.kube_client_cidr
port_min = 443
port_max = 443
}
]
worker_ingress_rules = [
{
source = var.kube_client_cidr
port_min = 30000
port_max = 32767
},
{
source = var.vcn_cidr
port_min = 22
port_max = 22
},
{
source = var.workerlb_cidr
port_min = 30000
port_max = 32767
},
{
source = var.workerlb_cidr
port_min = 10256
port_max = 10256
},
{
source = var.kmi_cidr
port_min = 22
port_max = 65535
},
]
kmi_lb_ingress_rules = [
{
source = local.kube_internal_cidr
port_min = var.kubernetes_api_port
port_max = var.kubernetes_api_port
},
{
source = var.kube_client_cidr
port_min = var.kubernetes_api_port
port_max = var.kubernetes_api_port
},
{
source = var.vcn_cidr
port_min = var.kubernetes_api_port
port_max = var.kubernetes_api_port
},
]
kmi_ingress_rules = [
{
source = var.kube_client_cidr
port_min = var.kubernetes_api_port
port_max = var.kubernetes_api_port
},
{
source = var.kmilb_cidr
port_min = var.kubernetes_api_port
port_max = var.kubernetes_api_port
},
{
source = var.worker_cidr
port_min = 1024
port_max = 65535
},
{
source = var.kmi_cidr
port_min = 1024
port_max = 65535
},
]
worker_ingress_udp_rules = [
{
source = var.worker_cidr
port_min = 8285
port_max = 8472
},
{
source = var.kmi_cidr
port_min = 8285
port_max = 8472
},
]
kmi_ingress_udp_rules = [
{
source = var.worker_cidr
port_min = 8285
port_max = 8472
},
{
source = var.kmi_cidr
port_min = 8285
port_max = 8472
},
]
}
oke_vcn.tf
Ce fichier définit un VCN, une passerelle NAT, une passerelle Internet, une table de routage privée et une table de routage publique. La table de routage privée est la table de routage par défaut pour le VCN.
resource "oci_core_vcn" "oke_vcn" {
cidr_block = var.vcn_cidr
dns_label = var.vcn_name
compartment_id = var.compartment_id
display_name = "${var.vcn_name}-vcn"
}
resource "oci_core_nat_gateway" "vcn_ngs" {
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
count = var.enable_private_endpoint ? 0:1
display_name = "VCN nat g6s"
}
resource "oci_core_internet_gateway" "vcn_igs" {
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
count = var.enable_private_endpoint ? 0:1
display_name = "VCN i6t g6s"
enabled = true
}
resource "oci_core_default_route_table" "default_private" {
manage_default_resource_id = oci_core_vcn.oke_vcn.default_route_table_id
display_name = "Default - private"
count = var.enable_private_endpoint ? 1:0
}
resource "oci_core_default_route_table" "private" {
count = var.enable_private_endpoint ? 0:1
manage_default_resource_id = oci_core_vcn.oke_vcn.default_route_table_id
display_name = "Default - private"
route_rules {
destination = "0.0.0.0/0"
destination_type = "CIDR_BLOCK"
network_entity_id = oci_core_nat_gateway.vcn_ngs[0].id
}
}
resource "oci_core_route_table" "public" {
count = var.enable_private_endpoint ? 0:1
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
display_name = "public"
route_rules {
destination = "0.0.0.0/0"
destination_type = "CIDR_BLOCK"
network_entity_id = oci_core_internet_gateway.vcn_igs[0].id
}
}
oke_worker_seclist.tf
Ce fichier définit les listes de sécurité pour le sous-réseau de processus actif et le sous-réseau d'équilibreur de charge de processus actif. Les règles de ces listes de sécurité ont été définies dans d'autres fichiers Terraform de cet ensemble.
resource "oci_core_security_list" "workerlb" {
display_name = "${var.vcn_name}-workerlb"
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
dynamic "ingress_security_rules" {
iterator = port
for_each = local.worker_lb_ingress_rules
content {
source = port.value.source
source_type = "CIDR_BLOCK"
protocol = "6"
tcp_options {
min = port.value.port_min
max = port.value.port_max
}
}
}
}
resource "oci_core_security_list" "worker" {
display_name = "${var.vcn_name}-worker"
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
dynamic "ingress_security_rules" {
iterator = port
for_each = local.worker_ingress_rules
content {
source = port.value.source
source_type = "CIDR_BLOCK"
protocol = "6"
tcp_options {
min = port.value.port_min
max = port.value.port_max
}
}
}
dynamic "ingress_security_rules" {
iterator = port
for_each = local.worker_ingress_udp_rules
content {
source = port.value.source
source_type = "CIDR_BLOCK"
protocol = "17"
udp_options {
min = port.value.port_min
max = port.value.port_max
}
}
}
}
oke_worker_subnet.tf
Ce fichier définit les sous-réseaux d'équilibreur de charge de processus actif et de processus actif. Le sous-réseau de l'équilibreur de charge de travail est nommé service-lb
.
resource "oci_core_subnet" "worker" {
cidr_block = var.worker_cidr
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
display_name = "worker"
dns_label = "worker"
prohibit_public_ip_on_vnic = true
security_list_ids = [
oci_core_default_security_list.oke_vcn.id,
oci_core_security_list.worker.id
]
}
resource "oci_core_subnet" "worker_lb" {
cidr_block = var.workerlb_cidr
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
display_name = "service-lb"
dns_label = "servicelb"
prohibit_public_ip_on_vnic = var.enable_private_endpoint
route_table_id = var.enable_private_endpoint==false ? oci_core_route_table.public[0].id : oci_core_vcn.oke_vcn.default_route_table_id
security_list_ids = [
oci_core_default_security_list.oke_vcn.id,
oci_core_security_list.workerlb.id
]
}
oke_kmi_seclist.tf
Ce fichier définit les listes de sécurité des sous-réseaux d'équilibreur de charge de plan de contrôle et de plan de contrôle. Ce fichier définit également les mises à jour à apporter à la liste de sécurité par défaut pour le VCN.
resource "oci_core_default_security_list" "oke_vcn" {
manage_default_resource_id = oci_core_vcn.oke_vcn.default_security_list_id
egress_security_rules {
destination = "0.0.0.0/0"
destination_type = "CIDR_BLOCK"
protocol = "all"
}
dynamic "ingress_security_rules" {
iterator = icmp_type
for_each = [3, 8, 11]
content {
# ping from VCN; unreachable/TTL from anywhere
source = (icmp_type.value == "8" ? var.vcn_cidr : "0.0.0.0/0")
source_type = "CIDR_BLOCK"
protocol = "1"
icmp_options {
type = icmp_type.value
}
}
}
}
resource "oci_core_security_list" "kmilb" {
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
display_name = "${var.vcn_name}-kmilb"
dynamic "ingress_security_rules" {
iterator = port
for_each = local.kmi_lb_ingress_rules
content {
source = port.value.source
source_type = "CIDR_BLOCK"
protocol = "6"
tcp_options {
min = port.value.port_min
max = port.value.port_max
}
}
}
dynamic "ingress_security_rules" {
for_each = var.enable_private_endpoint ? [] : [0]
content {
source = var.public_ip_cidr
source_type = "CIDR_BLOCK"
protocol = "6"
tcp_options {
min = var.kubernetes_api_port
max = var.kubernetes_api_port
}
}
}
}
resource "oci_core_security_list" "kmi" {
compartment_id = var.compartment_id
vcn_id = oci_core_vcn.oke_vcn.id
display_name = "${var.vcn_name}-kmi"
dynamic "ingress_security_rules" {
iterator = port
for_each = local.kmi_ingress_rules
content {
source = port.value.source
source_type = "CIDR_BLOCK"
protocol = "6"
tcp_options {
min = port.value.port_min
max = port.value.port_max
}
}
}
dynamic "ingress_security_rules" {
iterator = port
for_each = local.kmi_ingress_udp_rules
content {
source = port.value.source
source_type = "CIDR_BLOCK"
protocol = "17"
udp_options {
min = port.value.port_min
max = port.value.port_max
}
}
}
}
oke_kmi_subnet.tf
Ce fichier définit les sous-réseaux d'équilibreur de charge de plan de contrôle et de plan de contrôle.
Le nom du sous-réseau kmi
doit être exactement control-plane
.
resource "oci_core_subnet" "kmi" {
cidr_block = var.kmi_cidr
compartment_id = var.compartment_id
display_name = "control-plane"
dns_label = "kmi"
vcn_id = oci_core_vcn.oke_vcn.id
prohibit_public_ip_on_vnic = true
security_list_ids = [
oci_core_default_security_list.oke_vcn.id,
oci_core_security_list.kmi.id
]
}
resource "oci_core_subnet" "kmi_lb" {
cidr_block = var.kmilb_cidr
compartment_id = var.compartment_id
dns_label = "kmilb"
vcn_id = oci_core_vcn.oke_vcn.id
display_name = "control-plane-endpoint"
prohibit_public_ip_on_vnic = var.enable_private_endpoint
route_table_id = var.enable_private_endpoint==false ? oci_core_route_table.public[0].id : oci_core_default_route_table.default_private[0].id
security_list_ids = [
oci_core_default_security_list.oke_vcn.id,
oci_core_security_list.kmilb.id
]
}