CA证书和Ingress (6) Ingress 连接 https

Submitted by Lizhe on Wed, 04/24/2019 - 12:42

在之前做的例子中 ( 实际上也是绝大多数情况下 ) , 我们的 ingress 使用 443 端口, 提供了 https , 并且提供了 cert 证书, 然后它连接到后端服务的 80 端口

Ingress 443 => Backend 80

本例中我将尝试使用 Ingress 连接 backend 的 443 端口

Ingress 443 => Backend 443

这里我会使用下面的镜像

 

docker run -p 8080:80 -p 8443:443 --name nginx--rm -t mendhak/http-https-echo

CA证书和Ingress (5) Amazon Linux Certbot

Submitted by Lizhe on Tue, 04/23/2019 - 10:36

 

理论上来说, Amazon Linux 使用的是 Redhat 系的源码 + 自己的一些库 编译的, 也就是说应该和 Redhat/Centos 兼容,

但是实际上你无法直接在 Amazon Linux上直接使用 Certbot

 

[ec2-user@ip-10-1-0-60 ~]$ sudo /usr/local/bin/certbot-auto certonly

Sorry, I don't know how to bootstrap Certbot on your operating system!

 

You will need to install OS dependencies, configure virtualenv, and run pip install manually.

Please see https://letsencrypt.readthedocs.org/en/latest/contributing.html#prerequisites

for more info.

[ec2-user@ip-10-1-0-60 ~]$ 

CA证书和Ingress (4) 手动调用 letsencrypt

Submitted by Lizhe on Tue, 04/23/2019 - 00:20

 

lizhedeMacBook-Pro:lz_study lizhe$ ssh -i id_rsa ubuntu@54.95.179.97

Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1032-aws x86_64)

 

 * Documentation:  https://help.ubuntu.com

 * Management:     https://landscape.canonical.com

 * Support:        https://ubuntu.com/advantage

 

  System information as of Mon Apr 22 16:19:19 UTC 2019

 

  System load:  0.08               Processes:              179

  Usage of /:   35.1% of 15.45GB   Users logged in:        0

CA证书和Ingress (3) cert-manager 和 letsencrypt

Submitted by Lizhe on Mon, 04/22/2019 - 10:45

这玩意最大的好处就是 renew 是自动的

cert-manager is a Kubernetes addon to automate the management and issuance of TLS certificates from various issuing sources.

It will ensure certificates are valid and up to date periodically, and attempt to renew certificates at an appropriate time before expiry.

环境描述

这里我使用的是 Kubernetes + 我自己的一个独立域名, 运行在 aws 环境上 , ec2 主机的 ip 是 54.95.179.97

除了 cert-manager 安装在 system 命名空间下之外, 所有的资源 ( deployment, service, ingress, issuer, cert ) 全部都安装在 study 命名空间下

需要注意的是命名空间需要提前创建

CA证书和Ingress (2) 在Ingress中使用CA证书

Submitted by Lizhe on Sun, 04/21/2019 - 23:36

上一节中我们创建了一个自签名的CA证书

这一节我要尝试在Ingress中使用它

首先要在Kubernetes中创建 secret

kubectl create secret tls lizheca --key server.key --cert server.crt

然后就可以使用了

对应的Ingress内容为

 

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

name: hello-nginx-ingress

annotations:

kubernetes.io/ingress.class: "nginx"

spec:

tls:

- hosts:

- testca.com

secretName: lizheca

rules:

- host: testca.com

http:

paths:

- backend:

CA证书和Ingress (1) 创建自签名证书

Submitted by Lizhe on Sun, 04/21/2019 - 23:11

最近工作一直在和 Ingress 和 https 打交道, 写个专题记录一下

本篇文章重点关注如何创建自签名证书

1. 首先要生成一个 rsa 密钥

$ openssl genrsa -des3 -out server.key 2048

注意生成密钥时会要求输入最短4位的密码, 这个密码会在访问时弹出一个密码框, 后面我们会删除密码

2. 生成 csr , csr 是申请证书的请求文件

$ openssl req -new -key server.key -out server.csr

这里会要求你输入一些相关信息

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Beijing

Locality Name (eg, city) []:Beijing

Organization Name (eg, company) [Internet Widgits Pty Ltd]:lizhe

Go 多线程 (5) RWLock 读写锁

Submitted by Lizhe on Mon, 04/01/2019 - 15:31

读写锁的读行为不会造成同步

但是写行为会同时禁止 读/写 操作

例子很简单, 懒得写了网上找了一个, 下面可以看到读的时候没有阻塞

 

package main

 

import (

    "sync"

    "time"

)

 

var m *sync.RWMutex

 

func main() {

    m = new(sync.RWMutex)

 

    // 多个同时读

    go read(1)

    go read(2)

 

    time.Sleep(2 * time.Second)

}

 

func read(i int) {

    println(i, "read start")

 

    m.RLock()

    println(i, "reading")

AWS

Submitted by Lizhe on Tue, 03/12/2019 - 09:45

Amazon Glacier

安全持久的长期对象存储

每月免费提供 10GB 的 Amazon Glacier 数据检索。免费套餐限额可在当月任何时候使用,且适用于标准检索。AWS Elastic

Beanstalk

是一项易于使用的服务,用于在熟悉的服务器(例如 Apache 、Nginx、Passenger 和 IIS )上部署和扩展使用 Java、.NET、PHP、Node.js、Python、Ruby、GO 和 Docker 开发的 Web 应用程序和服务。

Amazon CloudFront


是一项快速内容分发网络 (CDN) 服务,可以安全地以低延迟和高传输速度向全球客户分发数据、视频、应用程序和 API,全部都在开发人员友好的环境中完成

AWS CloudTrail

是一项支持对您的 AWS 账户进行监管、合规性检查、操作审核和风险审核的服务。借助 CloudTrail,您可以记录日志、持续监控并保留与整个 AWS 基础设施中的操作相关的账户活动

Minio 入门 (2)

Submitted by Lizhe on Mon, 03/11/2019 - 15:46

上一节我们创建了一个bucket , 不过你是否注意到一个细节, 我们使用的是http

实际项目中你往往需要通过 https 

这里将https设置为true

 

lizhedeMacBook-Pro:~ lizhe$ cat ~/.s3cfg

# Setup endpoint

host_base = localhost:9090

host_bucket = localhost:9090

bucket_location = us-east-1

use_https = True

 

# Setup access keys

access_key = admin

secret_key = admin123456

 

# Enable S3 v4 signature APIs

signature_v2 = False

lizhedeMacBook-Pro:~ lizhe$ 

再尝试创建发现得到了错误

Minio 入门 (1)

Submitted by Lizhe on Mon, 03/11/2019 - 13:44

首先谈谈背景, 第一次听说Minio是在公司的一个基于AWS和Kubernetes的项目中, 这个项目本身的生产环境是 AWS上运行的Kubernetes集群, 但是本地开发环境使用的是docker swarm和minio

AWS , Kubernetes , docker swarm 这里就不老生常谈了, 那么minio 到底是个什么鬼

原来这个项目的图片在生产环境中是存储在S3桶上的, 本地开发环境中无法( 也可能是没钱 ) 让每个人都使用自己的s3桶, 所以我们使用了一个代替品

兼容亚马逊S3接口的minio , 既然接口是兼容的, 那么代码也就可以跨s3和minio使用了

 

minio可以方便的通过docker安装, 使用的端口是 9000, 数据的存储位置以参数形式决定

不过这里我的9000端口被portainer占用了, 所以我将 minio 的端口映射到9090

注意使用 -e MINIO_ACCESS_KEY=admin -e MINIO_SECRET_KEY=admin123456 配置了初始化用户名和密码

用户名要大于3个字符, 密码要在8到40个字符之间