Kubernetes集群内部通过服务名能进行相互调用,但如果Kubernetes中的pod需要调用外部服务,而且这些外部服务是属于不同的安全区域,就面临开墙的问题,因为Kubernetes Pod能够漂移道不同的宿主机中,因此很难做到只针对某几台确定的宿主机进行防火墙的开通。参考传统的架构中对外部服务的调用,在Kubernetes内部配置两台宿主机专门部署Nginx Pod,进行反向代理进行实现。

  •  外部调用内部,Ingress所在节点开墙

  •  内部调用外部,Nginx所在节点开墙

  • 为什么不在ingress内做反向代理,因为Ingress中的配置会随着pod的变化刷新掉,所以需要另外再启动个Nginx pod,固定在2台机器上。
  • Nginx的配置不能直接固定在Pod中,因为有新的外部服务进行接入时,需要更新nginx.conf,因此需要采用configmap进行配置。
  • 每个服务挂接一个不同的location
apiVersion: v1
data:
nginx.conf: |-
worker_processes ; events { worker_connections ; } http {
sendfile on; server {
listen ; # a test endpoint that returns http 200s
location /helloService {
proxy_pass http://somehost:somenodeport/;
proxy_set_header X-Real-IP $remote_addr;
}
} }
kind: ConfigMap
metadata:
name: nginx-config
namespace: default

nginx.yaml文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
run: my-nginx
spec:
replicas:
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: sz-pg-oam-docker-hub-.tendcloud.com/library/nginx:1.9
ports:
- containerPort:
volumeMounts:
- name: config-volume
mountPath: /etc/nginx
volumes:
- name: config-volume
configMap:
name: nginx-config

nginx启动后会替换/etc/nginx中的内容,变成只有一个nginx.config(我们配置的内容)

为了其他pod访问方面,还需要再建立一个services:nginxsvc

然后其他pod进去后通过

curl http://nginxsvc/helloService/hello

进行访问。

其他得命名空间访问

curl http://svcname:namespace/helloService/hello

这样在pod进行飘移后不需要再度进行不同主机的开墙,只需要保持部署nginx的两台机器开墙即可

此方案问题在于当有新的服务接入时,需要更新configmap配置,更新完后发现nginx内的目录文件也更新了,但是nginx没有reload配置。

需要将nginx重启后配置生效,可以通过kubectl delete pod方式进行逐个更新。

基于Nginx的开墙方案的更多相关文章

  1. Upsync:微博开源基于Nginx容器动态流量管理方案

    Upsync:微博开源基于Nginx容器动态流量管理方案 https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=404151075& ...

  2. 基于Nginx进行地图瓦片缓存的方案描述

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在产品的迭代中,我们完成了移动端瓦片缓存方案和服务端瓦片缓存 ...

  3. 基于nginx的频率控制方案思考和实践

    基于nginx的频率控制方案思考 标签: 频率控制 nginx 背景 nginx其实有自带的limit_req和limit_conn模块,不过它们需要在配置文件中进行配置才能发挥作用,每次有频控策略的 ...

  4. 基于nginx tomcat redis分布式web应用的session共享配置

    一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...

  5. 基于nginx的tomcat负载均衡和集群

    要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...

  6. 视频支持拖动进度条播放的实现(基于nginx)

    http协议下的flv/mp4流式播放支持的三个要点: 1 服务器端要支持flv/mp4流式播放,现在nginx或者lighttpd都是支持这样的应用的,还支持mp4的流式播放(默认编译版本一般都是打 ...

  7. windows下编译基于nginx插件的rtmp流媒体服务nginx-rtmp

    1 概述 rtmp流媒体服务器,开源方案有多种,包括srs,red5,crtmpserver,fms,nginx插件等.本文描述了基于nginx插件的方式来实现rtmp流媒体服务器nginx-rtmp ...

  8. 基于Quick-cocos2d-x的资源更新方案 二

    写在前面 又是12点半了,对于一个程序员来说,这是一个黄金时间,精力旺盛,我想,是最适合整理和分享一些思路的时候了. 自从上次写了 基于Quick-cocos2d-x的资源更新方案 同样可见quick ...

  9. 基于Ruby的watir-webdriver自动化测试方案与实施(五)

    接着基于Ruby的watir-webdriver自动化测试方案与实施(四) http://www.cnblogs.com/Javame/p/4164570.html 继续 ... ... 关于特殊控件 ...

随机推荐

  1. P2885

    2885 code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; b ...

  2. Disruptor 线程间共享数据无需竞争

    队列的作用是缓冲 缓冲到 队列的空间里.. 线程间共享数据无需竞争 原文 地址  作者  Trisha   译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke’ ...

  3. redis之(二)redis单机的安装,配置,启动,关闭

    [1]下载redis压缩包,解压,编译

  4. 四:ZooKeeper的集群,伪集群,单机的搭建

    一:ZooKeeper服务安装包下载 第一步:打开zooKeeper官网

  5. hdu 1426(DFS+坑爹的输入输出)

    Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  6. ubuntu16.04 安装composer和 laravel

    一.安装composer $ sudo apt-get update $ sudo apt-get install wget 下载composer.phar $ wget https://getcom ...

  7. python之md5模块

    python的md5模块使用非常简单,包括以下几个函数: md5.new([arg]) 返回一个md5对象,如果给出参数,则相当于调用了update(arg) md5.updte(arg) 用stri ...

  8. 【转载】RecyclerView源码解析

    原文地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0307/4032.html 概述 之前面试的时候经常有人问是否用过Re ...

  9. eclipse 查看jdk源码

    eclipse中引入jdk源码的设置:  设置: 1.点 "window"-> "Preferences" -> "Java" ...

  10. CF1027C Minimum Value Rectangle【贪心/公式化简】

    https://www.luogu.org/problemnew/show/CF1027C #include<cstdio> #include<string> #include ...