Mesos DNS API

ENTERPRISE

使用 Mesos DNA API 发现 IP 地址和端口

您可以使用 Mesos DNS API 发现其他应用程序的 IP 地址和端口。

路由

访问 Mesos DNS API 是通过每个节点上使用以下路由的 Admin Router 代理的:

  1. curl -H "Authorization: token=<auth-token>" http://<public-master-ip>/mesos_dns/v1/

访问代理节点的 Mesos DNS API 也是通过管理节点代理的:

  1. curl -H "Authorization: token=<auth-token>" http://<public-master-ip>/system/v1/agent/{agent_id}/mesos_dns/v1/

格式

Mesos DNS API 的请求和响应主体被编排成 JSON 格式。

请求必须包含接受标头:

  1. Accept: application/json

响应将包括内容类型标头:

  1. Content-Type: application/json

授权 Enterprise

所有 Mesos DNS API 路由需要认证才能使用。

要验证 API 请求,请参阅 获取认证令牌通过传递认证令牌

Mesos DNS API 还需要通过以下权限授权:

路由权限
/system/mesos_dns/v1/dcos:adminrouter:ops:mesos-dns
/system/v1/agent/{agent_id}/mesos_dns/v1/dcos:adminrouter:system:agent

用户也可以通过 dcos:superuser 权限获得所有路由。

要为您的帐户分配权限,请参阅 权限参考

资源

Mesos-DNS 实现了一个简单的 REST API,用于通过 HTTP 进行服务发现。这些示例假设您具有 与节点的 SSH 连接

GET /v1/version

以 JSON 格式列出 Mesos-DNS 版本和源代码 URL。

  1. curl -H "Authorization: token=<auth-token>" http://<public-master-ip>/mesos_dns/v1/version

输出应类似于:

  1. {
  2. "Service": "Mesos-DNS",
  3. "URL": "https://github.com/mesosphere/mesos-dns",
  4. "Version": "dev"
  5. }

GET /v1/config

以 JSON 格式列出 Mesos-DNS 配置参数。

  1. curl -H "Authorization: token=<auth-token>" http://<public-master-ip>/mesos_dns/v1/config

DC/OS 开源的输出应该类似于:

  1. {
  2. "RefreshSeconds": 30,
  3. "Port": 61053,
  4. "Timeout": 5,
  5. "StateTimeoutSeconds": 300,
  6. "ZkDetectionTimeout": 30,
  7. "HttpPort": 8123,
  8. "TTL": 60,
  9. "SOASerial": 1495828250,
  10. "SOARefresh": 60,
  11. "SOARetry": 600,
  12. "SOAExpire": 86400,
  13. "SOAMinttl": 60,
  14. "SOAMname": "ns1.mesos.",
  15. "SOARname": "root.ns1.mesos.",
  16. "Masters": null,
  17. "ZoneResolvers": {},
  18. "Resolvers": [
  19. "169.254.169.253"
  20. ],
  21. "IPSources": [
  22. "host",
  23. "netinfo"
  24. ],
  25. "Zk": "zk://zk-1.zk:2181,zk-2.zk:2181,zk-3.zk:2181,zk-4.zk:2181,zk-5.zk:2181/mesos",
  26. "Domain": "mesos",
  27. "File": "/opt/mesosphere/etc/mesos-dns.json",
  28. "Listener": "0.0.0.0",
  29. "HTTPListener": "0.0.0.0",
  30. "RecurseOn": true,
  31. "DnsOn": true,
  32. "HttpOn": true,
  33. "ExternalOn": true,
  34. "EnforceRFC952": false,
  35. "SetTruncateBit": false,
  36. "EnumerationOn": true,
  37. "MesosHTTPSOn": false,
  38. "CACertFile": "",
  39. "CertFile": "",
  40. "KeyFile": "",
  41. "MesosCredentials": {
  42. "Principal": "",
  43. "Secret": ""
  44. },
  45. "IAMConfigFile": "",
  46. "MesosAuthentication": ""
  47. }

Entperise DC/OS 的输出应该类似于:

  1. {
  2. "RefreshSeconds": 30,
  3. "Port": 61053,
  4. "Timeout": 5,
  5. "StateTimeoutSeconds": 300,
  6. "ZkDetectionTimeout": 30,
  7. "HttpPort": 8123,
  8. "TTL": 60,
  9. "SOASerial": 1495828138,
  10. "SOARefresh": 60,
  11. "SOARetry": 600,
  12. "SOAExpire": 86400,
  13. "SOAMinttl": 60,
  14. "SOAMname": "ns1.mesos.",
  15. "SOARname": "root.ns1.mesos.",
  16. "Masters": null,
  17. "ZoneResolvers": {},
  18. "Resolvers": [
  19. "169.254.169.253"
  20. ],
  21. "IPSources": [
  22. "host",
  23. "netinfo"
  24. ],
  25. "Zk": "zk://zk-1.zk:2181,zk-2.zk:2181,zk-3.zk:2181,zk-4.zk:2181,zk-5.zk:2181/mesos",
  26. "Domain": "mesos",
  27. "File": "/opt/mesosphere/etc/mesos-dns-enterprise.json",
  28. "Listener": "0.0.0.0",
  29. "HTTPListener": "127.0.0.1",
  30. "RecurseOn": true,
  31. "DnsOn": true,
  32. "HttpOn": true,
  33. "ExternalOn": true,
  34. "EnforceRFC952": false,
  35. "SetTruncateBit": false,
  36. "EnumerationOn": true,
  37. "MesosHTTPSOn": true,
  38. "CACertFile": "/run/dcos/pki/CA/certs/ca.crt",
  39. "CertFile": "/run/dcos/pki/tls/certs/mesos-dns.crt",
  40. "KeyFile": "/run/dcos/pki/tls/private/mesos-dns.key",
  41. "MesosCredentials": {
  42. "Principal": "",
  43. "Secret": ""
  44. },
  45. "IAMConfigFile": "/run/dcos/etc/mesos-dns/iam.json",
  46. "MesosAuthentication": "iam"
  47. }

GET /v1/hosts/

以 JSON 格式列出与主机名对应的 IP 地址。它与 DNS A 记录查找相同。

注意: HTTP 界面仅解析 Mesos 域中的主机名。

  1. curl -H "Authorization: token=<auth-token>" http://<public-master-ip>/mesos_dns/v1/hosts/nginx.marathon.mesos

输出应类似于:

  1. [
  2. {"host":"nginx.marathon.mesos.","ip":"10.249.219.155"},
  3. {"host":"nginx.marathon.mesos.","ip":"10.190.238.173"},
  4. {"host":"nginx.marathon.mesos.","ip":"10.156.230.230"}
  5. ]

GET /v1/services/

以 JSON 格式列出与主机名对应的主机名、IP 地址和端口。它与 DNS SRV 记录查找相同。

注意: HTTP 界面仅解析 Mesos 域中的服务名。

  1. curl -H "Authorization: token=<auth-token>" http://<public-master-ip>/mesos_dns/v1/services/_nginx._tcp.marathon.mesos

输出应类似于:

  1. [
  2. {"host":"nginx-s2.marathon.mesos.","ip":"10.249.219.155","port":"31644","service":"_nginx._tcp.marathon.mesos."},
  3. {"host":"nginx-s1.marathon.mesos.","ip":"10.190.238.173","port":"31667","service":"_nginx._tcp.marathon.mesos."},
  4. {"host":"nginx-s0.marathon.mesos.","ip":"10.156.230.230","port":"31880","service":"_nginx._tcp.marathon.mesos."}
  5. ]