分类目录归档:DevOps

istio服务网格生产环境ingress网关部署SSL实战

服务网格实战之SSL服务发布

准备物件:
1.被各大厂认证签发过的、认证的域名私有证书、私钥,比如istio.sklinux.com。
2.基于云的k8s集群(生产环境)。
3.istio基础设施已经通过helm部署,并$(kubectl get svc -n istio-system|grep istio-ingressgateway)得到外部ip。
4.创建证书对象以及服务应用编排。
5.发布应用编排并使用https://istio.sklinux.com 进行测试。
大致步骤分为上面5部分,下面重点说下第4部分
首先创建证书对象:
kubectl create -n istio-system secret tls istio-ingressgateway-certs \
–key ssl/istio.sklinux.com/private.key \
–cert ssl/istio.sklinux.com/certificate.crt
将在istio-system创建一个secret为istio-ingressgateway-certs的对象,分别是私钥和证书。
然后进行检查是否在ingress-gateway的容器中已经发现:

~ kubectl exec -it istio-ingressgateway-xxxxx-xxxxx -n istio-system -c istio-proxy — ls -al /etc/istio/ingressgateway-certs/
total 0
lrwxrwxrwx 1 root root 14 May 27 09:33 tls.crt -> ..data/tls.crt
lrwxrwxrwx 1 root root 14 May 27 09:33 tls.key -> ..data/tls.key

已经看见tls.crt和tls.key

下面进行服务编排:
主要编排路线是:
Gateway->VirtualService->DestinationRule->Service->Deployment
其中在Gateway中定义协议为HTTPS以及域名:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
privateKey: /etc/istio/ingressgateway-certs/tls.key
hosts:
- istio.sklinux.com
VirtualService 主要是做一些http的匹配规则,然后匹配规则流向何处,比如流向DestinationRule中的哪个版本。
DestinationRule中主要定义了有哪些目标路由和版本,这些目标具体由Service定义。版本的标签是由多个标签组成的deployment构成。

编排好后使用

istioctl kube-inject -f注入yaml,然后kubectl create -f 即可!

istio-ingress-sds的一些障碍绕行方法

 

1.通过官网的by step 使用ingress-gateway发布ssl始终不成功,但是ingress-gateway的http服务暴露ok。

2.决定使用曲线救援方法,在外侧通过nginx来发布tls,内部回源使用http,但是遇见了http 426的错误。

➜ ~ curl https://192.168.1.25:443/ -H “Host: uat.sklinux.com” -i -k -v
* Trying 192.168.1.25…
* TCP_NODELAY set
* Connected to 192.168.1.25 (192.168.1.25) port 443 (#0)
* WARNING: disabling hostname validation also disables SNI.
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.uat.sklinux.com
* Server certificate: Fishdrowned ROOT CA
> GET / HTTP/1.1
> Host: uat.sklinux.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 426 Upgrade Required
HTTP/1.1 426 Upgrade Required
< Server: nginx
Server: nginx
< Date: Mon, 27 May 2019 02:25:25 GMT
Date: Mon, 27 May 2019 02:25:25 GMT
< Content-Length: 0
Content-Length: 0
< Connection: keep-alive
Connection: keep-alive

经查原因为:

nginx 反向代理默认走的http 1.0版本

但是 被反向代理的服务器是1.1版本的!

所以在反向代理的时候加上一句:proxy_http_version 1.1;

即可!

但是最终通过SDS进行tls服务发布还没彻底解决,这个问题将持续跟进社区。

apollo配置中心新增自定义环境

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。   默认阿波罗环境设定了

LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;这样的环境命名空间。
增加sklinux环境示范:
1.假设增加sklinux
在com.ctrip.framework.apollo.core.enums.Env类中有定义。比如增加sklinux环境L
public enum Env{
  LOCAL, DEV, SKLINUX, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;
  ...
}
apollo/apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/Env.java 文件路径

2.修改com.ctrip.framework.apollo.core.enums.EnvUtils类,在其中加入BETA枚举的转换逻辑
case "SKLINUX":
        return Env.SKLINUX;

文件路径:
apollo/apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/EnvUtils.java
3.修改apollo-env.properties,增加beta.meta占位符:
local.meta=http://localhost:8080
dev.meta=${dev_meta}
fat.meta=${fat_meta}
sklinux.meta=${sklinux_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}
文件路径:
apollo/apollo-portal/src/main/resources/apollo-env.properties
4.修改com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider类,增加读取SKLINUX环境的meta server地址逻辑:

增加

env.getProperty("sklinux_meta", prop.getProperty("sklinux.meta")));

未增加前:
 domains.put(Env.LOCAL, getMetaServerAddress(prop, "local_meta", "local.meta"));
 domains.put(Env.DEV, getMetaServerAddress(prop, "dev_meta", "dev.meta"));
 domains.put(Env.FAT, getMetaServerAddress(prop, "fat_meta", "fat.meta"));
 domains.put(Env.UAT, getMetaServerAddress(prop, "uat_meta", "uat.meta"));
 domains.put(Env.LPT, getMetaServerAddress(prop, "lpt_meta", "lpt.meta"));
 domains.put(Env.PRO, getMetaServerAddress(prop, "pro_meta", "pro.meta"));
文件路径:
./apollo/apollo-core/src/main/java/com/ctrip/framework/apollo/core/internals/LegacyMetaServerProvider.java
cd apollo/scripts/ && ./build.sh 即可

[INFO] Reactor Summary for Apollo 1.4.0-SNAPSHOT:
[INFO]
[INFO] Apollo ……………………………………… SUCCESS [ 0.667 s]
[INFO] Apollo Core …………………………………. SUCCESS [ 3.964 s]
[INFO] Apollo Common ……………………………….. SUCCESS [ 1.377 s]
[INFO] Apollo Open Api ……………………………… SUCCESS [ 0.875 s]
[INFO] Apollo Portal ……………………………….. SUCCESS [ 6.668 s]
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 14.254 s
[INFO] Finished at: 2019-05-06T10:50:55+08:00
[INFO] ————————————————————————
==== building portal finished ====

5.protaldb增加SKLINUX环境配置。portaldb.serverconfig 表中的apollo.portal.envs字段 dev,uat,fat,pro,sklinux

6.为apollo-portal添加新增环境对应的meta server地址。apollo-env.properties中增加:dev.meta=http://x.x.x.x:8080
7.准备sklinux环境的adminservice和configservice 以及db,然后启动
8.重启portal服务就新增成功了。

普罗米修斯监控

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。

2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。Prometheus目前在开源社区相当活跃。

Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

Prometheus的特点

多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。 继续阅读普罗米修斯监控

linux文件系统高级权限属性

最近在cu论坛看见有同学在问,如何给一个目录设定root都不能删除的权限。

其实linux有高级权限,除了0777的权限位还有更高级的权限控制。在Linux下我们可以用lstat命令查看文件的相关属性信息,除了这些属性之外,Linux下的文件还有一些隐藏的属性,我们可以用lsattr命令来查看:

root@sklinux:/opt# lsattr
——a——e– ./src
如上面的a\e权限

上面这条命令的输出表示src文件具有扩展属性a和e,即只能向该文件添加数据,而不能删除,并且该文件使用extends来映射磁盘块。显然,将那些只允许增长但不允许修改和删除的文件设置为这样的隐藏属性是非常有利于保护数据安全的。 继续阅读linux文件系统高级权限属性

apollo配置中心增加环境的方法

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

Apollo支持4个维度管理Key-Value格式的配置:

  1. application (应用)
  2. environment (环境)
  3. cluster (集群)
  4. namespace (命名空间)

 

配置结构图为:

apollo配置架构
一、portal启动参数如下: 继续阅读apollo配置中心增加环境的方法

如何防止CSRF攻击

背景

随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。当然,浏览器自身也在不断在进化和发展,不断引入 CSP、Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁,这需要前端技术人员不断进行“查漏补缺”。

前端安全

近几年,美团业务高速发展,前端随之面临很多安全挑战,因此积累了大量的实践经验。我们梳理了常见的前端安全问题以及对应的解决方案,将会做成一个系列,希望可以帮助前端同学在日常开发中不断预防和修复安全漏洞。本文是该系列的第二篇。

今天我们讲解一下 CSRF,其实相比XSS,CSRF的名气似乎并不是那么大,很多人都认为“CSRF不具备那么大的破坏性”。真的是这样吗?接下来,我们还是有请小明同学再次“闪亮”登场。

CSRF攻击

CSRF漏洞的发生

相比XSS,CSRF的名气似乎并不是那么大,很多人都认为CSRF“不那么有破坏性”。真的是这样吗? 继续阅读如何防止CSRF攻击

自签泛域名证书

自签泛域名证书
此工具用于颁发泛域名证书,方便开发环境调试。

请勿用于生产环境,生产环境还是购买正式的证书。
或者到 Let’s Encrypt 可以申请到免费证书
(支持多域名和泛域名)。

优点
1.你可以创建任意网站证书,只需导入一次根证书,无需多次导入;
2.减少重复又无谓的组织信息输入,创建证书时只需要输入域名;
3.泛域名证书可以减少 nginx 配置,例如你要模拟 CDN:
4.假设你的项目网站是 example.dev,CDN 网站设置为 cdn.example.dev,
你只需在 nginx 里面配置一个网站,server_name 同时填写 example.dev
和 cdn.example.dev,它们可以使用同一个 *.example.dev 的证书。
5.现在你只需要一个证书,就可以搞定所有项目网站!

XenServer 7.1.0 安装及配置

Citrix Xenserver,思杰基于 Linux 的虚拟化服务器。Citrix XenServer 是一种全面而易于管理的服务器虚拟化平台,基于强大的 Xen Hypervisor 程序之上。Xen 技术被广泛看作是业界最快速、最安全的虚拟化软件。XenServer 是为了高效地管理 Windows(R) 和 Linux(R) 虚拟服务器而设计的,可提供经济高效的服务器整合和业务连续性。

下载安装 XenServer7

### 下载
下载ISO: http://downloadns.citrix.com.edgesuite.net/11988/XenServer-7.1.0-install-cd.iso
下载XenCenter(windows平台下的XenServer管理端): http://downloadns.citrix.com.edgesuite.net/12009/XenServer-7.1.0-XenCenterSetup-7.1.1.l10n.exe

### 安装
和安装普通的CentOS一样,插入光盘,启动安装就行,按照安装向导一步一步来
磁盘空间至少46G,推荐100G以上,内存最少2G,推荐4G以上

### 默认分区情况
GPT分区
18GB XenServer主机控制域(dom0)分区
18GB 升级备份分区
4GB 日志分区
1GB 交换分区
5GB UEFI引导分区

### 存储库(SR)、物理块设备(PBD)、虚拟磁盘映像(VDI)、虚拟块设备(VBD) 之间的关系 SR可用来存储ISO镜像文件,或者VDI
* ‘S R’ *
XenServer主机 <--> PBD <--> * VDI * <--> VBD <--> VM
XenServer主机 <--> PBD <--> * VDI * <--> VBD <--> VM
XenServer主机 <--> PBD <--> * VDI * <--> VBD <--> VM
* ‘S R’ *
XenServer 基本配置
1. 修改lvm配置,否则无法手动创建lvm逻辑卷
— /etc/lvm/lvm.conf —

metadata_read_only = 0

2. 准备另一块硬盘或者直接就在XenServer的系统分区(推荐另增一块硬盘),或者是Windows文件共享(CIFS),Linux文件共享(NFS),用来存放ISO镜像启动文件

3. XenCenter 创建SR,类型为ISO库,连接上面创建的ISO库,点击刷新就可以看到你的iso镜像文件了

4. 新建虚拟机VM -> 控制台 -> 然后就可以安装你的虚拟机了
XenServer 基本命令
### 新建SR
# ISO库
xe sr-create name-label=boot_iso type=iso content-type=iso device-config:location=/xenserver/iso device-config:legacy_mode=true
# VDI库
xe sr-create name-label=”Local storage 2″ type=lvm content-type=user device-config:device=/dev/xenserver/data host-uuid=uuid_host shared=false

xe vm-list # 查看vm
xe host-list # 查看host_uuid
xe-toolstack-restart # 重启toolstack

### 删除SR
xe sr-list
xe sr-list name-label=boot_iso # 查看sr的uuid

xe pbd-list sr-uuid=UUID_SR # 查看pbd的uuid
xe pdb-unplug uuid=UUID_PBD # 断开sr与pbd的连接

xe sr-forget uuid=UUID_SR # 删除sr
xe sr-destroy uuid=UUID_SR # 销毁sr

xe task-list # 查看后台任务
xe task-cancel uuid=… # 结束后台任务