Azure流量管理器SSL设置(非经典)

时间:2016-07-02 16:31:51

标签: azure https dns failover azure-traffic-manager

我有一个Azure API应用服务,我想配置"优先级"交通管理(这是新的交通管理员,而非经典)。我已将服务部署到两个单独的Azure区域,并配置了Traffic Manager实例以执行到两个服务实例的优先级路由。这些服务具有以下自定义域配置:

foo1.mydomain.com

foo2.mydomain.com

我有两个指向相应Azure应用服务IP地址的子域的记录。

我还为服务附加了通配符证书,如果我导航到https://foo1.mydomain.comhttps://foo2.mydomain.com,一切都很顺利。流量管理器端点监控将两个端点显示为联机并启用。

现在,我想让客户端向虚荣端点发出请求:foo.mydomain.com,我为其创建了一个CNAME。 CNAME指向流量管理器实例URL myapi.trafficmanager.net。

当我尝试使用SSL / TLS解析虚URL时,即https://foo.mydomain.com,我收到证书错误,因为流量管理器附加了* .azurewebsited.net证书。如果我尝试在没有SSL / TLS的情况下解析虚荣URL,即http://foo.mydomain.com,我会收到404和#34;未找到的Web应用程序"信息。同样,解析单个端点显式返回200预期。

我的问题:如何使用我的SSL / TLS证书和虚URL来正确配置Azure Traffic Manager以对两个自定义域名进行优先级路由?

挖掘输出以供参考:

my-machine:~ jtw$ dig foo.mydomain.com

; <<>> DiG 9.8.3-P1 <<>> foo.mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4088
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;foo.mydomain.com.      IN  A

;; ANSWER SECTION:
foo.mydomain.com.   299 IN  CNAME   myapi.trafficmanager.net.
myapi.trafficmanager.net. 299 IN    CNAME   foo1.mydomain.com.
foo1.mydomain.com.  299 IN  A   192.168.1.1 //the actual IP of my first priority endpoint is returned here

;; Query time: 369 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jul  3 11:13:59 2016
;; MSG SIZE  rcvd: 112

4 个答案:

答案 0 :(得分:11)

请参阅https://azure.microsoft.com/en-gb/documentation/articles/traffic-manager-how-traffic-manager-works/

由于Traffic Manager在DNS级别工作,您看到的证书(* .azurewebsites.net)必须来自App Service,而不是来自Traffic Manager。您需要将App Service配置为使用正确的SSL证书。

我建议您尝试在没有Traffic Manager的情况下使所有内容正常工作,并将您的虚拟域foo.mydomain.com设置为您的某个端点(foo1.mydomain.com)的CNAME。然后切换CNAME以指向另一个端点(foo2.mydomain.com)并再次确保一切正常。由于此时的任何问题都不能涉及流量管理器,这使得它们更容易调试。

一旦你有了工作,然后将流量管理器重新引入CNAME链。

此致

Jonathan Tuliani,Azure网络项目经理 - DNS和流量管理员

答案 1 :(得分:2)

需要将虚荣域名分配给每个端点应用服务,并且证书需要绑定到各个端点,即foo1和foo2以及虚荣端点。 您需要将证书绑定到将用作端点的所有应用服务中的虚荣域

DNS配置需要如下:

每个应用服务端点域的A记录,指向Azure为应用服务分配的IP地址。

从虚荣域指向* .trafficmanager.net域的CNAME。

答案 2 :(得分:1)

我遇到了同样的问题,并且在应用以下Azure和DNS配置之后终于能够解决此问题。我所缺少的是在每个端点上注册foo.mydomain.com。唯一域必须在api域之前绑定,否则由api域管辖。

Traffic Manager Endpoints
foo1.mydomain.com
foo2.mydomain.com

Endpoint 1 App Service SSL Bindings:
foo1.mydomain.com (Must Be Added First)
foo.mydomain.com

Endpoint 2 App Service SSL Bindings:
foo2.mydomain.com (Must Be Added First)
foo.mydomain.com

mydomain.com DNS Records
CNAME Host: foo, Value: myapi.trafficmanager.net
CNAME Host: foo1, Value: endpoint1.azurewebsites.net
CNAME Host: foo2, Value: endpoint2.azurewebsites.net

答案 3 :(得分:0)

流量管理器没有附加任何内容,因为它不是一个Web服务器,它只是一个比平均值更智能的熊名称服务器。

将您的流量管理器端点重新定义为:

#define OPTION_STRING "p:u:r:l:d:o:i:ah"
#define OP_ARG_PACK        'p'

extern char *optarg;
extern int optind, opterr, optopt;

char **arg_pack;
char **arg_output;

int arg_pack_count = 0;
int arg_output_count = 0;

while ((res = getopt(argc, argv, OPTION_STRING)) != -1 )
{
    if (res == (int) OP_ARG_PACK)
    {   
        int index = optind - 1;
        arg_pack_count++;
        while(index < argc)
        {   
            *arg_pack = malloc(strlen(argv[index])+1 );
            strcpy(arg_pack[index], argv[index]);
            index++;

            if ( (index<argc) && ((argv[index])[0] == '-') )
            {         
                optind = index - 1;
                break;
            }
        }
        emp_pack(arg_pack,arg_output);
    }
}

而不是.azurewebsites.net域名。