我按照以下文档在防火墙后面创建了一个 aks: https://docs.microsoft.com/en-us/azure/aks/limit-egress-traffic#restrict-egress-traffic-using-azure-firewall
唯一的区别是我创建了一个带有大小为 Standard_DC2s_v2 的机密计算 VM 的集群。错误是当 验证 sgx-plugins pods
kubectl get pods --all-namespaces
kube-system sgx-plugin-r6mmr 0/1 Init:CrashLoopBackOff 5 4m54s
kube-system sgx-webhook-787f99b5dc-qh2d5 0/1 Init:CrashLoopBackOff 4 5m50
如何重现它(尽可能少且精确):
Define a set of environment variables to be used in resource creations.
创建资源组
az group create --name $RG --location $LOC
创建具有两个子网的虚拟网络来托管 AKS 群集和 Azure 防火墙。 每个都有自己的子网。让我们从 AKS 网络开始。
az network vnet create
--resource-group $RG
--name $VNET_NAME
--location $LOC
--address-prefixes 10.42.0.0/16
--subnet-name $AKSSUBNET_NAME
--subnet-prefix 10.42.1.0/24
Azure 防火墙的专用子网(防火墙名称不能更改)
az network vnet subnet create
--resource-group $RG
--vnet-name $VNET_NAME
--name $FWSUBNET_NAME
--address-prefix 10.42.2.0/24
使用 UDR 创建和设置 Azure 防火墙 创建三个将用作 Azure 防火墙前端地址的标准 SKU 公共 IP 资源。
az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
安装 Azure 防火墙预览版 CLI 扩展
az extension add --name azure-firewall
部署 Azure 防火墙
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
配置防火墙 IP 配置
az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public- ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
捕获防火墙 IP 地址以备后用
FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIpAddress" -o tsv)
FWPUBLIC_IP_ID=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].publicIpAddress.id" -o tsv)
FWPUBLIC_IP=$(az network public-ip show --ids $FWPUBLIC_IP_ID --query "ipAddress" -o tsv)
或
FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv)
创建 UDR 并为 Azure 防火墙添加路由
az network route-table create -g $RG -l $LOC --name $FWROUTE_TABLE_NAME
az network route-table route create -g $RG --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME
--address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP
az network route-table route create -g $RG --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME
--address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet
添加 aks 所需的 FW 网络规则
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp'
--protocols 'UDP' --source-addresses '' --destination-addresses "AzureCloud.$LOC"
--destination-ports 1194 --action allow --priority 100
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp'
--protocols 'TCP' --source-addresses '' --destination-addresses "AzureCloud.$LOC"
--destination-ports 9000
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'time'
--protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'dnsserver'
--protocols 'UDP' --source-addresses '*' --destination-fqdns 10.41.0.10 --destination-ports 53
添加固件应用规则
az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'fqdn'
--source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService"
--action allow --priority 100
检查最终防火墙
az network firewall show -g $RG -n $FWNAME
将路由表关联到 AKS 将路由表与下一跳到防火墙关联到 AKS 子网
az network vnet subnet update -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --route-table $FWROUTE_TABLE_NAME
将出站类型为 UDR 的 AKS 部署到现有网络 创建 SP 并为虚拟网络分配权限
az ad sp create-for-rbac -n "${PREFIX}sp" --skip-assignment
它将返回一个退出,如: { "appId": "xxxxx", "displayName": "xxx", "name": "xxx", "密码": "xxx", “租户”:“xxx” }
现在将下面的 APPID 和 PASSWORD 替换为由上一个命令输出自动生成的服务主体 appid 和服务主体密码。我们将引用 VNET 资源 ID 向服务主体授予权限,以便 AKS 可以将资源部署到其中。 为 VNET 分配 SP 权限
az role assignment create --assignee $APPID --scope $VNETID --role "Network Contributor"
部署 AKS 设置子网 ID 的值
SUBNETID=$(az network vnet subnet show -g $RG --vnet-name $VNET_NAME --name $AKSSUBNET_NAME --query id -o tsv)
创建aks机密计算集群
az aks create -g $RG -n $AKSNAME -l $LOC
--node-count 1 --generate-ssh-keys
--network-plugin $PLUGIN
--outbound-type userDefinedRouting
--service-cidr 10.41.0.0/16
--dns-service-ip 10.41.0.10
--docker-bridge-address 172.17.0.1/16
--vnet-subnet-id $SUBNETID
--service-principal $APPID
--client-secret $PASSWORD
--api-server-authorized-ip-ranges $FWPUBLIC_IP/32
--enable-addon confcom
添加池节点
az aks nodepool add --cluster-name $AKSNAME --resource-group $RG --name confcompool1 --node-vm-size Standard_DC2s_v2 --node-count 1
查看节点列表
az aks nodepool list --cluster-name $AKSNAME --resource-group $RG
检索您的 IP 地址
使用任何有效
CURRENT_IP=$(dig @resolver1.opendns.com ANY myip.opendns.com +short)
CURRENT_IP=$(curl checkip.amazonaws.com)
CURRENT_IP=$(curl ifconfig.me)
CURRENT_IP=$(curl icanhazip.com)
CURRENT_IP=$(curl ipecho.net/plain)
CURRENT_IP=$(curl ifconfig.co)
添加到 AKS 批准列表(最好将其添加到 azure 控制台,以免删除其他人的访问权限)
az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $FWPUBLIC_IP/32,$CURRENT_IP/32
使用 [az aks get-credentials][az-aks-get-credentials] 命令配置 kubectl 以连接到您新创建的 Kubernetes 集群。
az aks get-credentials -g $RG -n $AKSNAME
验证节点
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-confcompool1-15977364-vmss000000 Ready agent 6m37s v1.19.11
aks-nodepool1-15977364-vmss000000 Ready agent 18m v1.19.11
验证 sgx-plugins pods
kubectl get pods --all-namespaces
kube-system sgx-plugin-8n6bj 0/1 Init:CrashLoopBackOff 5 5m42s
kube-system sgx-webhook-787f99b5dc-mwfps 0/1 Init:CrashLoopBackOff 7 18m