apolloconfig / apollo

Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.
https://www.apolloconfig.com
Apache License 2.0
29.16k stars 10.2k forks source link

meta 对应各env的地址访问不通或需要公网IP暴露才通 #1498

Closed hdpter closed 6 years ago

hdpter commented 6 years ago

刚看到 #743 这个建议,我赞同楼主说的第一点。而且,我现在也遇到了这个问题。

============================================================ 禁用configserver自带的eureka server,修改configserver源码,启用 EnableEurekaClient, 使用的公司已有的eureka 注册服务与发现。

portal部署在生产环境中,apollo-env.properties 配置有dev/test/pro三套环境 (三套环境网络隔离的)

dev.meta=http://apollo.dev.xxxx.com:11010 pro.meta=http://apollo.pro.xxxx.com:80 test.meta=http://apollo.test.xxxx.com:11010

以test为例:

apollo.test.xxxx.com 是域名,通过nginx代理后端config server (172.17.195.xx:8091)

test环境的内网IP,portal在生产环境中访问不到。(拿到的是test环境内部ip-homepageUrl ) http://apollo.test.xxxx.com:11010/services/admin [ { "appName": "APOLLO-ADMINSERVICE", "instanceId": "apollo-adminservice:8090", "homepageUrl": "http://172.17.195.xx:8090/" } ]

http://apollo.test.xxxx.com:11010/services/config [ { "appName": "APOLLO-CONFIGSERVICE", "instanceId": "apollo-configservice:8091", "homepageUrl": "http://172.17.195.xx:8091/" } ]

进行修改 改造:

在test中的adminserver启动时加入-Deureka.instance.homePageUrl=http://39.107.238.xx:8090 在test中的configserver启动时加入-Deureka.instance.homePageUrl=http://39.107.238.xx:8091 http://apollo.test.xxxx.com:11010/services/admin [ { "appName": "APOLLO-ADMINSERVICE", "instanceId": "apollo-adminservice:8090", "homepageUrl": "http://39.107.238.xx:8090/" --- 外网ip } ]

http://apollo.test.xxxx.com:11010/services/config [ { "appName": "APOLLO-CONFIGSERVICE", "instanceId": "apollo-configservice:8091", "homepageUrl": "http://39.107.238.xx:8091/" --- 外网ip } ] 此番修改后,portal启动时能正常访问test环境的adminserver和configserver。

目前将这三个环境的meta server(configserver)对应的IP已经完全暴露在公网上。(非常不安全) 而且homepageUrl也必须配置为公网IP,否则portal访问不到。

请问宋工,这种情况如何解决?安全第一嘛

hdpter commented 6 years ago

此番改造后,对部署在test环境中的其他应用程序来说,也产生一定的影响。

test1 上部署了 adminserver和configserver test2 ~ test9 部署应用程序 我在test2 ~ test9上放置一份 /opt/settings/server.properties文件,内容如下: apollo.meta=http://apollo.test.xxxx.com:11010 env=TEST

应用程序(apollo-client) 在启动时,检测到该server.properties文件,日志如下 image

test1 ~ test9 这9台服务器都在同一网段内,test9通过apollo-meta,拿到的也是homepageUrl对应的公网IP,如果这个IP不暴露8091端口的话,test9是连不上config server的。

也就是说:test1上的adminserver configserver 必须暴露在公网上,否则同一环境下也访问不了。

nobodyiam commented 6 years ago

portal -> meta server(域名) -> 获取admin service服务列表 client -> meta server(域名) -> 获取config service服务列表

client一般和config service都在一个内网,所以config service并不需要配置homePageUrl。

portal需要访问各个环境的meta server以及admin service,我们的网络和你的不太一样,是生产环境和测试环境是专线打通的(单向可访问),你们如果要走公网的话确实会有安全问题,可以考虑对admin service的公网IP做防火墙策略?比如只允许portal的ip可以访问过来?

hdpter commented 6 years ago

感谢宋工的解答 我目前的做法就是在防火墙上面设置可访问的IP白名单

nobodyiam commented 6 years ago

case先关闭了,如还有问题,可以提供更多信息,或进群交流。