Geolocation 国家/地区筛选的可能方式有哪些?

Geolocation 国家/地区筛选的可能方式有哪些?,geolocation,kubernetes,google-kubernetes-engine,Geolocation,Kubernetes,Google Kubernetes Engine,我现在正在使用GKE(kubernetes)和nginx容器来代理不同的服务。我的目标是阻止一些国家。我习惯于使用nginx及其有用的geoip模块来实现这一点,但到目前为止,kubernetes没有将真正的客户ip转发到容器,因此我无法使用它 在kubernetes实际转发真实IP之前,过滤国家的最简单/最便宜的解决方案是什么 对外服务 简单的谷歌服务器,只有nginx,过滤国家,转发给kubernetes(在价格和可靠性方面不是很好) 修改kube代理(正如我在这里和那里看到的,但它似乎有

我现在正在使用GKE(kubernetes)和nginx容器来代理不同的服务。我的目标是阻止一些国家。我习惯于使用nginx及其有用的geoip模块来实现这一点,但到目前为止,kubernetes没有将真正的客户ip转发到容器,因此我无法使用它

在kubernetes实际转发真实IP之前,过滤国家的最简单/最便宜的解决方案是什么

  • 对外服务
  • 简单的谷歌服务器,只有nginx,过滤国家,转发给kubernetes(在价格和可靠性方面不是很好)
  • 修改kube代理(正如我在这里和那里看到的,但它似乎有点奇怪)
  • 前端geoip过滤(嗯,到目前为止还不是个好主意)

谢谢大家!

首先在GKE上,如果您使用的是nginx入口控制器,您应该关闭默认的GCE控制器:,否则他们会打架

kubernetes不会将真正的客户ip转发到容器

只有通过kube代理使用NodePort和/或LoadBalancer类型的服务时,才会出现这种情况。使用nginx入口控制器,您使用hostPort运行,因此实际上是docker守护进程隐藏了源ip。我认为docker的后续版本默认为iptables模式,这将再次显示源ip

同时,您可以通过运行nginx控制器获得源ip,如下所示:

然而,这使用了主机联网,而不是最好的选择。插入您可以使用代理协议获取src ip:

此外(如果您尚未意识到),nginx控制器默认启用了geoip模块:

如果需要更多帮助,请打开一个问题


编辑:代理协议可以通过ssl代理实现,当前为alpha:

首先在GKE上如果您使用的是nginx入口控制器,您应该关闭默认的GCE控制器:,否则他们会打架

kubernetes不会将真正的客户ip转发到容器

只有通过kube代理使用NodePort和/或LoadBalancer类型的服务时,才会出现这种情况。使用nginx入口控制器,您使用hostPort运行,因此实际上是docker守护进程隐藏了源ip。我认为docker的后续版本默认为iptables模式,这将再次显示源ip

同时,您可以通过运行nginx控制器获得源ip,如下所示:

然而,这使用了主机联网,而不是最好的选择。插入您可以使用代理协议获取src ip:

此外(如果您尚未意识到),nginx控制器默认启用了geoip模块:

如果需要更多帮助,请打开一个问题


编辑:代理协议可以通过ssl代理(当前为alpha)实现:

您可以使用自定义nginx映像并使用映射创建过滤器

// this in http section
map $geoip_country_code $allowed_country {
   default yes;
   UY      no;
   CL      no;
}


您可以使用自定义nginx图像和贴图来创建过滤器

// this in http section
map $geoip_country_code $allowed_country {
   default yes;
   UY      no;
   CL      no;
}


这一部分很简单,但问题是真正的IP没有转发到nginx。这一部分很简单,但问题是真正的IP没有转发到nginx。好的,我会研究一下,我可以尝试使用nginx而不是kube代理,我希望它比这更简单。我不确定当我更新kubernetes时事情会有多容易。好的,我会研究一下,我可以尝试使用nginx而不是kube代理,我希望它会比这更简单。我不确定当我更新kubernetes时事情会有多容易。