基于Nginx的开墙方案
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的开墙方案的更多相关文章
- Upsync:微博开源基于Nginx容器动态流量管理方案
Upsync:微博开源基于Nginx容器动态流量管理方案 https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=404151075& ...
- 基于Nginx进行地图瓦片缓存的方案描述
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在产品的迭代中,我们完成了移动端瓦片缓存方案和服务端瓦片缓存 ...
- 基于nginx的频率控制方案思考和实践
基于nginx的频率控制方案思考 标签: 频率控制 nginx 背景 nginx其实有自带的limit_req和limit_conn模块,不过它们需要在配置文件中进行配置才能发挥作用,每次有频控策略的 ...
- 基于nginx tomcat redis分布式web应用的session共享配置
一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...
- 基于nginx的tomcat负载均衡和集群
要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...
- 视频支持拖动进度条播放的实现(基于nginx)
http协议下的flv/mp4流式播放支持的三个要点: 1 服务器端要支持flv/mp4流式播放,现在nginx或者lighttpd都是支持这样的应用的,还支持mp4的流式播放(默认编译版本一般都是打 ...
- windows下编译基于nginx插件的rtmp流媒体服务nginx-rtmp
1 概述 rtmp流媒体服务器,开源方案有多种,包括srs,red5,crtmpserver,fms,nginx插件等.本文描述了基于nginx插件的方式来实现rtmp流媒体服务器nginx-rtmp ...
- 基于Quick-cocos2d-x的资源更新方案 二
写在前面 又是12点半了,对于一个程序员来说,这是一个黄金时间,精力旺盛,我想,是最适合整理和分享一些思路的时候了. 自从上次写了 基于Quick-cocos2d-x的资源更新方案 同样可见quick ...
- 基于Ruby的watir-webdriver自动化测试方案与实施(五)
接着基于Ruby的watir-webdriver自动化测试方案与实施(四) http://www.cnblogs.com/Javame/p/4164570.html 继续 ... ... 关于特殊控件 ...
随机推荐
- MyBatis根据数组、集合查询
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.it ...
- Leetcode 之Add Binary(29)
比较简单,细节:先将字符串翻转,注意进位. string addBinary(string a, string b) { string result; int len = a.size() > ...
- django “如何”系列7:错误汇报
当你正在运行一个公共的站点的时候,你应该关掉DEBUG设置.这将使你的服务器运行的更快,同时也能预防别有用心的用户从你的错误页面看到你应用的一些详细配置信息.然而,当debug为false的时候,你将 ...
- poj 2104(线段树)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 45653 Accepted: 15177 Ca ...
- 深入理解计算机(CSAPP)资源汇总
用于资源记录. 视频: 卡内基梅隆大学 Introduction to Computer Systems CMU 15-213 Fall 作业(labs): Lab Assignments
- 在CentOS7.5的虚拟环境下新建你的django项目
1.首先安装pyenv和virtualenvs,之前的博客有说安装过程 2.创建Django专用的虚拟环境[root@localhost ~]# mkdir Django_env[root@local ...
- ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总
前记: 去年测试了ELK,今年测试了Storm,最终因为Storm需要过多开发介入而放弃,选择了ELK.感谢互联网上各路大神,目前总算是正常运行了. logstash+elasticsearch+ki ...
- ELK系列--justniffer0.5.12安装报错解决方法
现象: justniffer的0.5.12(安装后显示0.5.13版本)安装过程中需要升级boost至1.46以上版本,同时在make时会出现如下报错: /opt/Python-2.6.6/Pytho ...
- python链接mysql以及mysql中对表修改的常用语法
MySQL是一个关系型数据库管理系统 ,其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.在使用过程中不总是和它打交道,导致使用时候都得 ...
- MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
- PK: primary key (column is part of a pk) 主键- NN: not null (column is nullable) 是否为空 (非空)- UQ: uni ...