天天看點

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

問題描述

經過前兩篇文章,分别使用VM搭建了Kafka服務,建立了Azure Function項目,并且都在本地運作成功。

  1. 【Azure Developer】在Azure VM (Windows) 中搭建 kafka服務,并且通過本地以及遠端驗證 發送+消費 消息
  2. 【Azure 應用服務】本地建立Azure Function Kafka Trigger 函數和Kafka output的HTTP Trigger函數實驗

現在,本文中将把Kafka Trigger Function代碼部署到Azure中,并解決Function在雲上運作時遇見的 (Failed to resolve 'xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn:9092': No such host is known. )問題

問題解答

第一部分:從VS 2022中部署Function代碼到Azure Function App

首先:在Azure中建立好一個Function App,在Function App Overview頁面下載下傳Publish Profile檔案

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

然後:在VS 2022中引入Publish Profile檔案,點選釋出

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

最後:把 BrokerList ,KafkaPassword ,ConnectionString 添加到Function App的Application Setting中

"BrokerList": "xxx.xxx.xxx.xxx:9092",
    "KafkaPassword": "KafkaPassword",
    "ConnectionString": "ConnectionString"      
【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

以上操作完成後,正常情況Function會運作成功。但是由于實驗中使用的Kafka服務沒有公共域名,隻是使用IP位址進行通路。但是Kafka Trigger作為消費者連接配接到服務端時,GroupCoordinator 會通過IP位址,擷取到Kafka Server生産的預設域名(如:Failed to resolve 'xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn:9092': No such host is known.)然後需要在本地進行解析,而VM環境中可以通過修改 windows host檔案來指定IP。但是在PaaS服務(Azure Function)中,是無法修改的。那麼是否有辦法來自定義DNS伺服器呢? 請見第二部分。

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

第二部分:解決Failed to resolve 'xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn:9092': No such host is known. 問題

為了能夠讓Azure Function能夠解析 *****.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn 的私有域名,就需要找一個自定義的DNS伺服器,然後在Function中配置  WEBSITE_DNS_SERVER,用指定的DNS 伺服器來解析私有域名。

本文中使用的自定義DNS服務為 Azure 的 DNS Zone 服務,它可以自由的定義私有域名并且指定A記錄。

第一步: 以 bx.internal.chinacloudapp.cn為 自定義域建立DNS Zone

進入DNS zones - Microsoft Azure 由世紀互聯營運,建立名為 bx.internal.chinacloudapp.cn的DNS Zone資源

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

第二步:把kafka伺服器的預設域名在DNS Zone中添加為A記錄

點選“Record Set”,選擇A記錄,輸入kafka服務域名,然後添加IP位址。

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

第三步:通過ping指令反解析處DNS Zone的Service IP位址,然後以此IP位址測試解析 Kafka域名,驗證是否能成功解析為Kafka服務IP位址

通過 nslookup 指定DSN解析伺服器為 ns1-02.azure-dns.cn 成功解析kafka域名, 因為Azure Funciton WEBSITE_DNS_SERVER  隻能設定為IP位址,是以需要找出ns1-02.azure-dns.cn的IP位址 

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

第四步:把DNS Zone服務的IP位址作為Function 的第一DNS解析伺服器

在Funciton App 的配置頁面,設定 WEBSITE_DNS_SERVER 和WEBSITE_ALT_DNS_SERVER 的值。

WEBSITE_DNS_SERVER  40.73.192.2
WEBSITE_ALT_DNS_SERVER  168.63.129.16  

PS: WEBSITE_ALT_DNS_SERVER 作為次DNS伺服器, 它的值為168.63.129.16 (Azure服務預設的DNS伺服器位址)

第五步:在Function1, Function2中,驗證Function運作正常

【Azure 應用服務】部署Kafka Trigger Function到Azure Function服務中,解決自定義域名解析難題

【END】

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀