kubernetes6 (ingress)

一、Ingress服务简介

单独用service暴露服务的方式,在实际生产环境中不太适用。
ClusterIP的方式只能在集群内部访问;NodePort方式,当服务在集群中运行过多时,NodePort的端口管理是灾难;LoadBalance方式受限于云平台,且通常在云平台部署ELB还需要额外的费用。

一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。Ingress由两部分组成:Ingress controller和Ingress服务。

Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。

ingress服务的使用必须在策略网络中才能实现,如calico网络

二、ingress部署

用deployment控制器部署ingress-controller,创建一个LoadBalancer类型的service关联这组pod。LoadBalancer的service绑定了公网地址。真机进行域名解析之后,即可实现集群服务的对外暴露

上传镜像

kubernetes6 (ingress)_第1张图片
kubernetes6 (ingress)_第2张图片
kubernetes6 (ingress)_第3张图片

修改配置文件

Installation Guide - NGINX Ingress Controller https://kubernetes.github.io/ingress-nginx/deploy/
kubernetes6 (ingress)_第4张图片
下载deloy.yaml文件
在deloy.yaml文件修改镜像地址
kubernetes6 (ingress)_第5张图片
kubernetes6 (ingress)_第6张图片
执行deploy.yaml清单
kubernetes6 (ingress)_第7张图片
主要负责nginx的负载均衡器
查看ingress-nginx的所有信息,可以看到ingress-nginx-controller已经running
kubernetes6 (ingress)_第8张图片
svc和pod都已经就绪
查看svc暴露端口为32567
kubernetes6 (ingress)_第9张图片
有对应的
kubernetes6 (ingress)_第10张图片

创建ingress服务

kubernetes6 (ingress)_第11张图片
kubernetes6 (ingress)_第12张图片
按照这个信息修改ingress.yaml
kubernetes6 (ingress)_第13张图片
kubernetes6 (ingress)_第14张图片
访问控制器时,就可以转发到myapp-svc端口上
kubernetes6 (ingress)_第15张图片客户端测试访问的32567端口,访问成功
kubernetes6 (ingress)_第16张图片
kubernetes6 (ingress)_第17张图片
修改为loadbalancer,被分到一个vip
kubernetes6 (ingress)_第18张图片
kubernetes6 (ingress)_第19张图片
可以直接curl 172.26.240.100,和下图获得同样效果
kubernetes6 (ingress)_第20张图片

ingress管理多个svc

清除之前的实验
kubernetes6 (ingress)_第21张图片
将deployment.yaml和ingress.yaml放到一个路径
复制headless
kubernetes6 (ingress)_第22张图片
编辑deployment
kubernetes6 (ingress)_第23张图片
运行
ingress后面调度的是svc,svc资源和ingress在一起
kubernetes6 (ingress)_第24张图片
kubernetes6 (ingress)_第25张图片
kubernetes6 (ingress)_第26张图片

访问不同的路径可以接到不同的svc上

kubernetes6 (ingress)_第27张图片
kubernetes6 (ingress)_第28张图片
现在通过域名进行暴露
kubernetes6 (ingress)_第29张图片
kubernetes6 (ingress)_第30张图片
解析到vip上
kubernetes6 (ingress)_第31张图片
负载均衡
kubernetes6 (ingress)_第32张图片

加密认证重定向

现在想通过443端口HTTPS方式(加密)来访问服务
原本的yaml
kubernetes6 (ingress)_第33张图片

开启tls加密

开启集群,生成key
kubernetes6 (ingress)_第34张图片
用生成的证书和key创建tls-secrets(secrets对应密钥)
kubernetes6 (ingress)_第35张图片
kubernetes6 (ingress)_第36张图片
两个域名都用下面的tls-secret加密方法
kubernetes6 (ingress)_第37张图片
kubernetes6 (ingress)_第38张图片
没有定义后端默认页会显示404
kubernetes6 (ingress)_第39张图片
一旦启动加密,就是自动重定向
kubernetes6 (ingress)_第40张图片
在这里插入图片描述
说明加密生效

认证

kubernetes6 (ingress)_第41张图片
存入认证信息
kubernetes6 (ingress)_第42张图片
其实是一个base64的编码格式
kubernetes6 (ingress)_第43张图片

annotation参数

Annotation,顾名思义,就是注解。Annotation可以将Kubernetes资源对象关联到任意的非标识性元数据。使用客户端(如工具和库)可以检索到这些元数据。Annotation与Label类似,也使用key/value键值对的形式进行定义。不同的Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并且用于Label Selector。而Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找,很多时候,Kubernetes的模块自身会通过Annotation的方式标记资源对象的特殊信息。

kubernetes6 (ingress)_第44张图片

kubernetes6 (ingress)_第45张图片
kubernetes6 (ingress)_第46张图片
401是需要认证
kubernetes6 (ingress)_第47张图片

重写功能

kubernetes6 (ingress)_第48张图片
kubernetes6 (ingress)_第49张图片
kubernetes6 (ingress)_第50张图片
在这里插入图片描述

重定向到一个路径

kubernetes6 (ingress)_第51张图片
kubernetes6 (ingress)_第52张图片
kubernetes6 (ingress)_第53张图片

你可能感兴趣的:(kubernetes,docker,运维)