Ken*_*son 4 azure terraform terraform-provider-azure azure-aks
我正在使用 Terraform azurerm 提供程序版本 1.19 创建 AKS 集群。我想在创建集群时指定网络安全组规则,但我不知道如何引用创建的安全组,因为生成的安全组被赋予了带有随机数的名称。
就像是:
aks-agentpool-33577837-nsg
有没有办法引用创建的 nsg 或至少输出名称中使用的随机数?
创建集群的配置:
resource "azurerm_resource_group" "k8s" {
name = "${var.resource_group_name}"
location = "${var.location}"
}
resource "azurerm_kubernetes_cluster" "k8s" {
name = "${var.cluster_name}"
location = "${azurerm_resource_group.k8s.location}"
resource_group_name = "${azurerm_resource_group.k8s.name}"
dns_prefix = "${var.dns_prefix}"
kubernetes_version = "${var.kubernetes_version}"
linux_profile {
admin_username = "azureuser"
ssh_key {
key_data = "${file("${var.ssh_public_key}")}"
}
}
agent_pool_profile {
name = "default"
count = "${var.agent_count}"
vm_size = "${var.vm_size}"
os_type = "Linux"
}
service_principal {
client_id = "${var.client_id}"
client_secret = "${var.client_secret}"
}
tags {
source = "terraform"
environment = "${var.environment}"
}
}
Run Code Online (Sandbox Code Playgroud)
这会生成一个安全组,我想向其中添加其他规则。这是我想添加的规则,以便可以检查 nginx 控制器的活动探针。
resource "azurerm_network_security_rule" "nginx_liveness_probe" {
name = "nginx_liveness"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "${var.nginx_liveness_probe_port}"
source_address_prefix = "*"
destination_address_prefix = "*"
resource_group_name = "${azurerm_kubernetes_cluster.k8s.node_resource_group}"
network_security_group_name = How do I reference the auto-generated nsg ?
description = "Allow access to nginx liveness probe"
}
Run Code Online (Sandbox Code Playgroud)
回答您问题的解决方案:
data "azurerm_resources" "example" {
resource_group_name = azurerm_kubernetes_cluster.example.node_resource_group
type = "Microsoft.Network/networkSecurityGroups"
}
output name_nsg {
value = data.azurerm_resources.example.resources.0.name
}
resource "azurerm_network_security_rule" "example" {
name = "example"
priority = 100
direction = "Outbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "*"
source_address_prefix = "*"
destination_address_prefix = "*"
resource_group_name = azurerm_kubernetes_cluster.example.node_resource_group
network_security_group_name = data.azurerm_resources.example.resources.0.name
}
Run Code Online (Sandbox Code Playgroud)
..然后以同样的方式添加所有规则。
一般来说,最好并建议使用 Azure Kubernetes 服务对 Kubernetes 服务的创建做出反应的自动化方式,而不是使用更多 Terraform(尽管下面的 Kubernetes yaml 也可以与Kubernetes Terraform 提供程序一起使用):
网络安全组筛选 VM(例如 AKS 节点)的流量。当您创建服务(例如 LoadBalancer)时,Azure 平台会自动配置所需的任何网络安全组规则。请勿手动配置网络安全组规则来筛选 AKS 群集中 pod 的流量。将任何所需的端口和转发定义为 Kubernetes 服务清单的一部分,并让 Azure 平台创建或更新适当的规则。您还可以使用网络策略(如下一节中所述)自动将流量过滤规则应用到 Pod。
在当前设置中应该可以通过简单地为您想要公开的那些端口创建 Kubernetes 服务来实现。
例如,当我部署入口控制器时,Kubernetes 服务的创建会触发 IP 地址/负载均衡器及其 NSG 的创建:
data "azurerm_resources" "example" {
resource_group_name = azurerm_kubernetes_cluster.example.node_resource_group
type = "Microsoft.Network/networkSecurityGroups"
}
output name_nsg {
value = data.azurerm_resources.example.resources.0.name
}
resource "azurerm_network_security_rule" "example" {
name = "example"
priority = 100
direction = "Outbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "*"
source_address_prefix = "*"
destination_address_prefix = "*"
resource_group_name = azurerm_kubernetes_cluster.example.node_resource_group
network_security_group_name = data.azurerm_resources.example.resources.0.name
}
Run Code Online (Sandbox Code Playgroud)
通过创建映射到所需 pod 端口并指定 loadBalancerSourceRanges 的 Kubernetes 服务(类型为 LoadBalancer),可以为自定义目标指定类似的设置。
apiVersion: v1
kind: Service
metadata:
name: ingress-ingress-nginx-controller
namespace: ingress
spec:
loadBalancerSourceRanges:
- 8.8.8.8/32
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress
app.kubernetes.io/name: ingress-nginx
type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4016 次 |
| 最近记录: |