上文已经基本完成了环境的搭建,prometheus可以以https的方式从node_exporter和cAdvisor上pull到数据,访问grafana时也可以以https的方式访问,安全性得到了一定的保障,但还存在一些问题,本节将继续完善


一、分析与改进

目前架构为

VM1和VM2分别开启两端口向外暴露,在LB上开四个端口分别去对应VM1/VM2上的端口,

由prometheus去连接LB上的四个端口,从而获取监控数据。

但是,LB上做的是NAT端口转发,任何IP都可以去连接这个四个端口,并且无身份验证,因此增加了安全风险

所以需要在LB上设定,仅可以运行prometheus的IP访问这四个端口

可以访问 https://LBIP:18008  https://LBIP:19101检查是否可以访问

【问题】在LB上无法限定某个特定IP访问,因此需要借助NSG来实现

新方案

先介绍一下AZURE上的NSG:

NSG是网络安全组,VM和网络的连接、不同子网间的通信均可以通过NSG进行限制,介于VM 和 LB/NAT之间

我们可以利用NSG来对从LB来的流量做限定

应用到本方案中:为VM1/VM2添加NSG,NSG会对LB上任何端口转发来的流量做限定

在NSG上开启只允许某个特定IP访问VM1/VM2上的指定端口即可实现。

二、实现步骤

1、在VM1/VM2所在的资源组中创建一个NSG

2、在NSG中添加 允许80和443端口的入站规则,保证原来的网站可以正常访问

3、将VM1/VM2的网卡关联到新创建的NSG中

4、检查LB上的NAT入站规则的端口,18008/19101/28008/29101

5、在新创建的NSG上创建入站规则,只允许特定IP访问VM1/VM2的特定端口

6、检查prometheus是否可以连接node_exporter和cAdvisor

登陆grafana查询各个节点状态

显示1证明连接正常

再去用其他任何IP访问:

https://LBIP:19101

https://LBIP:18008

https://LBIP:29101

https://LBIP:28008

访问失败表示成功!

7、收尾

检查prometheus server的NSG对外开放了哪些端口,最终只允许开放443端口,其余端口一律禁止!

【总结】

以上与prometheus相关的所有组件均是以http协议传输的,大大降低了它的安全性,为解决这个问题使用了如下方法:

1、prometheus与node_exporter和cAdvisor之间的数据传输使用了stunnel,先将收集到的数据转成https,然后再传输。
2、grafana默认是http,使用nginx生成https的站点,当用户访问443端口时自动跳转到grafana上
      由于LB不支持对特定IP的限定,因此增加了NSG对特定IP做限定,这样一来,有且仅有prometheus server 可以访问使得安全性有进一步增强

最后,我理解的正确的部署场景应当是:
业务机VM1/VM2和prometheus server三台虚机在一个NSG中,这三个虚机组成了一个局域网,外界是无法直接访问其中任何一台的,只能通过Load Balance跳转,然后在Load Balance上开一个端口用于以https的方式访问grafana,由于prometheus node_exporter cAdvisor在局域网中,因此数据传输不存在安全性问题,这样就可以不对http做转换了。

Azure容器监控部署(下)的更多相关文章

  1. Azure容器监控部署(上)

    前两篇简单的介绍了一下prometheus的,本节原本是写node_exporter和cAdvisor的搭建,但网上教程很多,所以直接写整套环境的部署过程 一.架构 我们原来的系统架构是在AZURE上 ...

  2. Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...

  3. docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)

    =============================================== 2018/7/8_第1次修改                       ccb_warlock === ...

  4. Ubuntu系统下容器化部署gitlab

    容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...

  5. 使用ARM模板在Azure中国大规模部署DCOS集群

    容器技术是目前非常流行的技术,尤其是在以Docker作为容器引擎的推动下,让容器的轻量级,可移植,自包含,隔离性等的上了一个新的台阶,目前谈及Dev/Ops,CI/CD很少能够绕过Docker的. A ...

  6. 使用ML.NET + ASP.NET Core + Docker + Azure Container Instances部署.NET机器学习模型

    本文将使用ML.NET创建机器学习分类模型,通过ASP.NET Core Web API公开它,将其打包到Docker容器中,并通过Azure Container Instances将其部署到云中. ...

  7. Azure 项目构建 – 部署高可用的 Python Web 应用

    Python 以其优美,清晰,简单的特性在全世界广泛流行,成为最主流的编程语言之一.Azure 平台针对 Python 提供了非常完备的支持.本项目中,您将了解如何构造和部署基于 Azure Web ...

  8. 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.本篇会介绍几个目前比较常用且流行的容器监控工具,首先我们来看看Docker自带的 ...

  9. Prometheus监控学习笔记之容器监控Grafana模块

    0x00 概述 Grafana 是一个开源的,可以用于大规模指标数据的可视化项目,甚至还能对指标进行报警.基于友好的 Apache License 2.0 开源协议,目前是prometheus监控展示 ...

随机推荐

  1. gitbub高效查找优秀项目

    in:name example   名字中带有example的项目 in:readme example 在readme文件带有example的项目 in:description example 描述里 ...

  2. java设计模式结构型模式

    结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题 分类: • 适配器模式.代理模式.桥接模式. 装饰模式.组合模式.外观模式.享元模式 结构型模式 ...

  3. 【05】C#特有的ref、out参数

    java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 我们这次要来探讨C#特有的ref.out参数. ...

  4. c# asp.net core取当月第一天和最后一天及删除最后一个字符的多种方法

    当月第一天0时0分0秒 DateTime.Now.AddDays( - DateTime.Now.Day).Date 当月最后一天23时59分59秒 DateTime.Now.AddDays( - D ...

  5. 我是如何一步步编码完成万仓网ERP系统的(二)前端框架

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  6. oracle中如何生成awr【性能调优】报告

    1.进入数据库 sqlplus / as sysdba 2.查看用户 show parameter db_name 3.开始压测后执行 exec DBMS_WORKLOAD_REPOSITORY.CR ...

  7. javascript高级程序设计学习历程

    第三章 基本概念 3.1 语法 3.1.1 区分大小写 ECMAScript中的一切(变量,函数,操作符)都区分大小写的 3.1.2 标识符 标识符:变量,函数,属性的名字以及函数的参数. 标识符的命 ...

  8. riscv 汇编与反汇编

    为了riscv指令集,我们需要汇编与反汇编工具来分析指令格式. 可以用下面的两个工具来汇编和反汇编,下载链接:https://pan.baidu.com/s/1eUbBlVc riscv-none-e ...

  9. 实验吧——who are you?(insert into注入 二分法 时间盲注)

    题目地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 根据提示  “我要把攻击我的人都记录db中去!”  猜测这是insert into注入,会 ...

  10. android studio学习----通过libs来导入jar包

    百度经验有一种方法: 1 点击启动AndroidStudio,启动后的界面如图所示. 2 复制你需要添加的jar,并将其黏贴到app— —src— —main— —libs文件夹下,可运行的Andro ...