AKS - Terraform 的 network_profile 区块
AKS - Terraform's network_profile block
使用 terraform
和 azurerm
提供商创建 aks
集群时,您可以指定此块:
network_profile {
network_plugin = var.network_plugin
network_policy = var.network_policy
load_balancer_sku = "Standard"
docker_bridge_cidr = var.docker_bridge_cidr
service_cidr = var.service_cidr
dns_service_ip = var.dns_service_ip
}
我读过 this page(还有很多!)几遍,但我还是不太明白它的意思。
network_pluggin
:Kubenet 与 Azure CNI;为什么要使用一个而不是另一个?我知道 kubenet 比 Azure CNI 允许更少的 ip 耗尽机会,启用时推荐使用 Azure CNI AAD pod identity
- 对吗?
network_policy
:我认为这是管理内部 k8s 的方式 network policies
load_balancer_sku
:这个我很清楚;没问题
docker_bridge_cidr
:我认为 azure
并没有真正使用它,更像是一些遗留的东西,docker
需要在工作节点上配置。
service_cidr
:我不知道文档中“Kubernetes 服务使用的网络范围的含义。更改它会强制创建新资源。 “
dns_service_ip
: 如上所述我不是很确定
此外,当我提供我的 default_node_pool
一个 vnet_subnet_id
居住时,它会用 31 Scale set instance
填充给定的子网我我只给了我的集群 1 的 min_count
和 2 的 max_count
并且 vnet_subnet_id
是一个 /24
(251
免费 IP)。 31
实例来自哪里?
network_plugin
= AAD Pod Identity 将与 Kubenet
一起使用,但从 here. Kubenet also uses a so called Overlay Network and is doing therefore NAT, this means AKS nodes gets IPs inside your Subnet and the Pods receive an IP address from a logically different address space. Azure CNI assign IP addresses from your Subnet to Nodes and also to Pods. You need to think before how many Nodes & Pods you will have in your subnet to not run into the issue that no IPs are left for new Pods or Nodes. Here 开始不推荐设置您可以找到一篇正在执行性能的文章比较。
network_policy
= 是的,就是开启Kubernetes Network Policies。如果您使用 Azure 作为网络插件,则可以使用 Azure 或 Calico 作为网络策略。 Calico 具有 GlobalNetworkPolicies.
的优势
docker_bridge_cidr
= 它是遗留的,但 def。今天需要
service_cidr
= 这是集群中 Kubernetes Services 的 CIDR。
dns_service_ip
= 需要在 service_cidr
内。默认情况下,Kubernetes 会将 x.x.x.10 分配为 DNS IP。您可以在此处更改此设置。这就是为什么 Azure CNI 需要更多规划的原因,
要回答您的最后一个问题,Azure CNI 会预先保留所有 IP 地址,因此如果您使用 1 个节点进行设置且默认设置 max_pods=30
,它将在您的子网内保留 31 个 IP。
使用 terraform
和 azurerm
提供商创建 aks
集群时,您可以指定此块:
network_profile {
network_plugin = var.network_plugin
network_policy = var.network_policy
load_balancer_sku = "Standard"
docker_bridge_cidr = var.docker_bridge_cidr
service_cidr = var.service_cidr
dns_service_ip = var.dns_service_ip
}
我读过 this page(还有很多!)几遍,但我还是不太明白它的意思。
network_pluggin
:Kubenet 与 Azure CNI;为什么要使用一个而不是另一个?我知道 kubenet 比 Azure CNI 允许更少的 ip 耗尽机会,启用时推荐使用 Azure CNIAAD pod identity
- 对吗?network_policy
:我认为这是管理内部 k8s 的方式network policies
load_balancer_sku
:这个我很清楚;没问题docker_bridge_cidr
:我认为azure
并没有真正使用它,更像是一些遗留的东西,docker
需要在工作节点上配置。service_cidr
:我不知道文档中“Kubernetes 服务使用的网络范围的含义。更改它会强制创建新资源。 “dns_service_ip
: 如上所述我不是很确定
此外,当我提供我的 default_node_pool
一个 vnet_subnet_id
居住时,它会用 31 Scale set instance
填充给定的子网我我只给了我的集群 1 的 min_count
和 2 的 max_count
并且 vnet_subnet_id
是一个 /24
(251
免费 IP)。 31
实例来自哪里?
network_plugin
= AAD Pod Identity 将与Kubenet
一起使用,但从 here. Kubenet also uses a so called Overlay Network and is doing therefore NAT, this means AKS nodes gets IPs inside your Subnet and the Pods receive an IP address from a logically different address space. Azure CNI assign IP addresses from your Subnet to Nodes and also to Pods. You need to think before how many Nodes & Pods you will have in your subnet to not run into the issue that no IPs are left for new Pods or Nodes. Here 开始不推荐设置您可以找到一篇正在执行性能的文章比较。
的优势network_policy
= 是的,就是开启Kubernetes Network Policies。如果您使用 Azure 作为网络插件,则可以使用 Azure 或 Calico 作为网络策略。 Calico 具有 GlobalNetworkPolicies.docker_bridge_cidr
= 它是遗留的,但 def。今天需要service_cidr
= 这是集群中 Kubernetes Services 的 CIDR。dns_service_ip
= 需要在service_cidr
内。默认情况下,Kubernetes 会将 x.x.x.10 分配为 DNS IP。您可以在此处更改此设置。这就是为什么 Azure CNI 需要更多规划的原因,
要回答您的最后一个问题,Azure CNI 会预先保留所有 IP 地址,因此如果您使用 1 个节点进行设置且默认设置 max_pods=30
,它将在您的子网内保留 31 个 IP。