防火墙下 aks 上的 sgx 插件 CrashLoopBackOff 不起作用

时间:2021-06-02 19:37:10

标签: kubernetes firewall azure-aks sgx

我按照以下文档在防火墙后面创建了一个 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

0 个答案:

没有答案