經過前兩篇文章,分別使用VM搭建了Kafka服務,建立了Azure Function專案,並且都在本地執行成功。
現在,本文中將把Kafka Trigger Function程式碼部署到Azure中,並解決Function在雲上執行時遇見的 (Failed to resolve 'xxxxxxtest01.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn:9092': No such host is known. )問題
"BrokerList": "xxx.xxx.xxx.xxx:9092", "KafkaPassword": "KafkaPassword", "ConnectionString": "ConnectionString"
以上操作完成後,正常情況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 Function能夠解析 *****.c2vbkl4ntjrehlqe5jmwliuhob.bx.internal.chinacloudapp.cn 的私有域名,就需要找一個自定義的DNS伺服器,然後在Function中設定 WEBSITE_DNS_SERVER,用指定的DNS 伺服器來解析私有域名。
本文中使用的自定義DNS服務為 Azure 的 DNS Zone 服務,它可以自由的定義私有域名並且指定A記錄。
進入DNS zones - Microsoft Azure 由世紀互聯運營,建立名為 bx.internal.chinacloudapp.cn的DNS Zone資源
點選「Record Set」,選擇A記錄,輸入kafka服務域名,然後新增IP地址。
通過 nslookup 指定DSN解析伺服器為 ns1-02.azure-dns.cn 成功解析kafka域名, 因為Azure Funciton WEBSITE_DNS_SERVER 只能設定為IP地址,所以需要找出ns1-02.azure-dns.cn的IP地址
在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伺服器地址)
【END】
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!