WedX - журнал о программировании и компьютерных науках

Ошибка развертывания ARM на шлюзе приложений Azure WAF_V2

Ошибка при развертывании шлюза приложений waf_v2 с несколькими слушателями. Для одного листнера он работает нормально.

Ошибка :

{code: DeploymentFailed, сообщение: сбой хотя бы одной операции развертывания ресурса. Пожалуйста, перечислите операции развертывания для получения подробной информации. Подробнее об использовании см. https://aka.ms/DeployOperations, подробности: [{code: BadRequest, сообщение: {\ r \ n ошибка: {\ r \ n код: ApplicationGatewayHttpListenersUsingSameFrontendPortAndFrontendIpConfig, \ r \ n сообщение: два Http-прослушивателя журнала-listner шлюза приложений и список вложенийmgmt-listner используют один и тот же порт Frontend / subscriptions / 775851cb-5-cb5 47a6-b60d-4c1ec4b078fc / resourceGroups / drgr001appgatewaydevtest-au / Providers / Microsoft.Network / applicationGateways / bo-appgw-waf-v2-entdev1 / frontendPorts / frontendPorts и FrontendIpConfiguration / subscriptions / 47585cb-470cb-478cb-478cb-478cb-478cb-478cb-478cb-4b0cb-478cb-478cb-478cb-478cb-470cb-478cb-478cb-478cb-478 drgr001appgatewaydevtest-au / sizes / Microsoft.Network / applicationGateways / bo-appgw-waf-v2-entdev1 / frontendIPConfigurations / PrivateFrontendIp., \ r \ n подробности: [] \ r \ n} \ r \ n}}]}

код шаблона:

  // Application Gateway
{
  "name": "[parameters('applicationGatewayName')]",
  "type": "Microsoft.Network/applicationGateways",
  "apiVersion": "2020-03-01",
  "location": "[parameters('location')]",
  "zones": "[parameters('availabilityZones')]",
  "properties": {
    "sku": {
      "name": "WAF_v2",
      "tier": "WAF_v2",
      "capacity": "[parameters('capacity')]"
    },

    "sslCertificates": [
      {
        "name": "[parameters('certName')]",
        "properties": {
          "data": "[parameters('certData')]",
          "password": "[parameters('certPassword')]"
        }
      }
    ],
    "gatewayIPConfigurations": [
      {
        "name": "gatewayIp",
        "properties": {
          "subnet": {
            "id": "[variables('subnetRef')]"
          }
        }
      }
    ],
    "trustedRootCertificates": "[parameters('trustedRootCertificates')]",
    "frontendIPConfigurations": [
      {
        "name": "PublicFrontendIp",
        "properties": {
          "privateIPAllocationMethod": "Dynamic",
          "publicIPAddress": {
            "id": "[parameters('publicIpResourceId')]"
          }
        }
      },
      {
        "name": "PrivateFrontendIp",
        "properties": {
          "privateIPAddress": "[parameters('privateIPAddress')]",
          "privateIPAllocationMethod": "Static",
          "subnet": {
            "id": "[variables('subnetRef')]"
          }
        }
      }
    ],
    "frontendPorts": [
      {
        "name": "frontendPorts",
        "properties": {
          "Port": 443
        }
      }
    ],
    "backendAddressPools": "[parameters('backendAddressPools')]",
    "probes": "[parameters('probes')]",
    "copy": [
      {
        "name": "backendHttpSettingsCollection",
        "count": "[length(parameters('backendHttpSettings'))]",
        "input": {
          "name": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].name]",
          "properties": {
            "port": 443,
            "pickHostNameFromBackendAddress": true,
            "protocol": "Https",
            "probeEnabled": "[parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].probeEnabled]",
            "probe": {
              "id": "[resourceId('Microsoft.Network/applicationGateways/probes',  parameters('applicationGatewayName'), parameters('backendHttpSettings')[copyIndex('backendHttpSettingsCollection')].probe)]"
            }
          }
        }
      },
      {
        "name": "httpListeners",
        "count": "[length(parameters('httpListeners'))]",
        "input": {
          "name": "[parameters('httpListeners')[copyIndex('httpListeners')].name]",
          "properties": {
            "protocol": "Https",
            // Set hostname if it exists
            "hostName": "[if(contains(parameters('httpListeners')[copyIndex('httpListeners')], 'hostName'), parameters('httpListeners')[copyIndex('httpListeners')].hostName, '')]",
            "sslCertificate": {
              "id": "[concat(variables('applicationGatewayId'), '/sslCertificates/',parameters('httpListeners')[copyIndex('httpListeners')].sslCertificateName)]"
            },
            "frontendIPConfiguration": {
              "id": "[concat(variables('applicationGatewayId'), '/frontendIPConfigurations/PrivateFrontendIp')]"
            },
            "frontendPort": {
              "id": "[concat(variables('applicationGatewayId'), '/frontendPorts/frontendPorts')]"
            }
          }
        }
      },
      {
        "name": "requestRoutingRules",
        "count": "[length(parameters('requestRoutingRules'))]",
        "input": {
          "name": "[parameters('requestRoutingRules')[copyIndex('requestRoutingRules')].name]",
          "properties": {
            "ruleType": "Basic",
            "backendAddressPool": {
              "id": "[concat(variables('applicationGatewayId'), '/backendAddressPools/',parameters('requestRoutingRules')[copyIndex('requestRoutingRules')].backendpoolName)]"
            },
            "backendHttpSettings": {
              "id": "[concat(variables('applicationGatewayId'), '/backendHttpSettingsCollection/',parameters('requestRoutingRules')[copyIndex('requestRoutingRules')].backendHttpSetting)]"
            },
            "httpListener": {
              "id": "[concat(variables('applicationGatewayId'), '/httpListeners/',parameters('requestRoutingRules')[copyIndex('requestRoutingRules')].httpListener)]"
            }
          }
        }
      }
    ],
    "redirectConfigurations": "[parameters('redirectConfigurations')]",
    "enableHttp2": "[parameters('enableHttp2')]",
    "webApplicationFirewallConfiguration": "[variables('webApplicationFirewallConfiguration')]",
    "urlPathMaps": "[parameters('urlPathMaps')]",
    "authenticationCertificates": "[parameters('authenticationCertificates')]",
    "sslPolicy": {
      "policyType": "Predefined",
      "policyName": "AppGwSslPolicy20170401S"
    },
    "rewriteRuleSets": "[parameters('rewriteRuleSets')]"
  }
}

Используемый параметр:

"backendHttpSettings": {
  "value": [
    {
      "name": "https-attachment",
      "probeEnabled": true,
      "probe": "attachment-probe"
    },
    {
      "name": "https-journal",
      "probeEnabled": true,
      "probe": "journal-probe"
    }
  ]
},

"backendAddressPools": {
  "value": [
    {
      "name": "AttachmentServicePool",
      "properties": {
        "backendAddresses": [
          {
            "fqdn": "attachmentmgmt-svc-api-dev-euw.aseentdev.sys.dom"
          }
        ]
      }
    },
    {
    "name": "journalServicePool",
      "properties": {
        "backendAddresses": [
          {
            "fqdn": "journalmgmt-svc-api-dev-euw.aseentdev.sys.dom"
          }
        ]
      }
    }
  ]
},

"availabilityZones": {
  "value": [
    1,
    2
  ]
},

"probes": {
  "value": [

    {
      "name": "attachment-probe",
      "properties": {
        "protocol": "Https",
        "PickHostNameFromBackendHttpSettings": true,
        "path": "/index.htm",
        "interval": 5,
        "timeout": 10,
        "match": {
          "statusCodes": [
            200
          ],
          "body": "SUCCESS"
        }
      }
    },
    {
      "name": "journal-probe",
      "properties": {
        "protocol": "Https",
        "PickHostNameFromBackendHttpSettings": true,
        "path": "/index.htm",
        "interval": 5,
        "timeout": 10,
        "match": {
          "statusCodes": [
            200
          ],
          "body": "SUCCESS"
        }
      }
    }
  ]
},

"httpListeners": {
  "value": [
    {
      "name": "attachmentmgmt-listner",
      "sslCertificateName": "abc"
    },
    {
      "name": "journal-listner",
      "sslCertificateName": "abc"
    }
  ]
},

"urlPathMaps": {
  "value": []
},

"requestRoutingRules": {
  "value": [

    {
      "name": "attachment-routing-rule",
      "backendpoolName": "AttachmentServicePool",
      "backendHttpSetting": "https-attachment",
      "httpListener": "attachmentmgmt-listner"
    },
    {
      "name": "journal-routing-rule",
      "backendpoolName": "journalServicePool",
      "backendHttpSetting": "https-journal",
      "httpListener": "journal-listner"
    }
  ]
},

Ответы:


1

Вы не можете создать два базовых слушателя на одном и том же порту. Либо используйте разные порты, либо два разных имени хоста с многосайтовым прослушивателем.

введите описание изображения здесь

19.08.2020
  • Спасибо, я пропустил имя хоста в файле параметров, 20.08.2020

  • 2

    изменение в файле параметров с передачей имени хоста для httplistner работало нормально.

    "httpListeners": {
    "value": [
    {
      "name": "listner1",
      "sslCertificateName": "ABC",
      "hostName": "wb.abc.dom"
    },
    {
      "name": "listner2",
      "sslCertificateName": "ABC",
      "hostName": "wb1.abc.dom"
    }  
    ]
    }
    
    20.08.2020
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]