При создании нового кластера AKS за сценой создается несколько сетевых ресурсов (внутри MC_${RESOURCE_GROUP_NAME}${CLUSTER_NAME}${LOCATION}
группы ресурсов). Одним из ресурсов является IP-адрес stati c publi c (аналогичный тому, который вы создаете с помощью команды CLI * 1047). Вы можете найти этот stati c IP внутри MC resource group => Load balancer => Frontend IP configuration
.
Проблема связана с командой az network public-ip list --resource-group <resourceGroup> --query [0].ipAddress --output tsv
.
эта команда возвращает первый Stati c Ip в данной группе ресурсов , поскольку --query
указывает на первый объект внутри массива - [0].ipAddress
, вы всегда получаете один и тот же IP-адрес, который является автоматически созданным IP-адресом.
Но, даже если вы выбрали правильный IP, вы все еще сталкивается с проблемой (), поскольку в документации упоминается, что - When multiple addresses are configured on the Azure Load Balancer, egress uses the first IP on that load balancer (Frontend IP Configuration)
.
Поэтому мы должны использовать первый IP-адрес stati c, созданный автоматически при создании кластер.
Сквозное решение, которое работало для меня:
- Получите IP-адрес stati c publi c: ( Вам не нужно создавать новый)
EGRESS_IP=$(az network public-ip list --resource-group MC_${RESOURCE_GROUP_NAME}_${CLUSTER_NAME}_${LOCATION} --query '[0].ipAddress' --output tsv)
echo The egress ip address is: $EGRESS_IP
Создание службы со стати c IP:
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: azure-egress
namespace: ${NAMESPACE}
spec:
loadBalancerIP: ${EGRESS_IP}
type: LoadBalancer
ports:
- port: 80
EOF
Убедитесь, что служба запущена и работает (проверьте, что вы получаете external-ip, и он не застрял, это может занять 1-3 минуты):
kubectl get svc -n ${NAMESPACE}
Чтобы убедиться, что выходная служба работает должным образом, мы будем использовать службу поиска DNS:
kubectl run -it --rm aks-egress-ip-check -n ${NAMESPACE}--image=debian --generator=run-pod/v1
Запустить тест:
apt-get update && \
apt-get install curl -y && \
curl -s checkip.dyndns.org