ingress实现https代理访问

证书

密钥

创建证书 钥

secrets 保存密钥信息,部署pod时把secrets挂载到pod

openssl reg -x509 -sha256 -nodes -days 365 -newkey ras:2048 -keyout tls.key -out tls.crt -subi "/CN=nginxsvc/0=nginxsvc"

req: 生成证书文件的情趣

x509: 生成x.509自签名的证书

sha256:表示使用sha-256的散列算法

-nodes:表示生成的密钥不加密

days 365: 证书有效期是365天

-newkey rsa:2048: RSA的密钥对,长度2048位

keyout tls.key -out tls.crt: 密钥文件 key 证书文件

crt-subj"/CN=nginxsvc/0=nginxsvc": 主题,CN common name o: organization 组织

nginx的登录账户认证:

nginx的重写,nginx的重定向

nginx-ingress-controller

traefik ingress controller:

traefik是一个为了让部署微服务更加快捷而诞生的一个http方向代理,负载均衡

traefik设计时就能够实时的和k8s API交互,感知后端service以及pod的变化,可以自动更新配置和重载

pod内 nginx 80 8081

traefik的部署方式:

daemonset

特点

优点: 每个节点都会部署一个traefik,节点感知,可以自动发现,更新容器的配置。不需要手动重载。

缺点: 资源占用,大型集群中,deamonset可能会运行多个traefik的实力,尤其是节点上不需要大量容器运行的情况下。没有办法扩缩容

部署对外集群:对外的业务会经常变更,deamonset可以更好的,自动的发现服务配置变更

deployment

优点:集中办公控制,可以使用少量的实例来运行处理整个集群的流量。更容易升级和维护

缺点: deployment的负载均衡不会均分到每个节点。手动更新,无法感知容器内部配置的变化

部署对内集群:对内的相对稳定,更新和变化也比较少,适合deployment

traffic-tye: internal  对内服务

traffic-type: external  对外服务

nginx-ingress:

工作原理都一样,都是7层代理,都可以动态的更新配置,都可以自动发现服务

traefik-ingress: 白动更新的重载更快,更方便

traefik的并发能力只有nginx-ingress的6成 60%

nginx-ingress-controller

traefik

wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml

wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml

wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml

wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml

ingress:

nginx-ingresscontroller

deployment+loadbalancer: 公有云提供负载均衡的公网地址

daemonset+hostbnetworktnodeseletor: 和节点服务共享网络,一个节点一个cntroller pod.使用宿主机的端口性能每好,适合大并发

deployment+NodePort: 最常见,最常用,最简单的方法。但是性能不太好,多了一成nat也址转发。

traefik-ingress-controller

daemonset 对外 可以自动更新容器的配置 host 节点网络

deployment 对内 无法自动自动更新配置 NodePort

https:

1.生成证书密

2.创建secret,保存证书和密钥

3.创建ingress把secret导入

加密认证:

1、htpasswd -c auth 认证文件只能是auth

2、创建ingress:

nginx.ingress .kubernetes .io/auth-type: basic

#声明认证类型

nginx,ingress .kubernetes ,io/auth-secret: basic-auth

#导入认证的密钥文件