一、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绑定了公网地址。真机进行域名解析之后,即可实现集群服务的对外暴露
上传镜像
修改配置文件
Installation Guide - NGINX Ingress Controller https://kubernetes.github.io/ingress-nginx/deploy/
下载deloy.yaml文件
在deloy.yaml文件修改镜像地址
执行deploy.yaml清单
主要负责nginx的负载均衡器
查看ingress-nginx的所有信息,可以看到ingress-nginx-controller已经running
svc和pod都已经就绪
查看svc暴露端口为32567
有对应的
创建ingress服务
按照这个信息修改ingress.yaml
访问控制器时,就可以转发到myapp-svc端口上
客户端测试访问的32567端口,访问成功
修改为loadbalancer,被分到一个vip
可以直接curl 172.26.240.100,和下图获得同样效果
ingress管理多个svc
清除之前的实验
将deployment.yaml和ingress.yaml放到一个路径
复制headless
编辑deployment
运行
ingress后面调度的是svc,svc资源和ingress在一起
访问不同的路径可以接到不同的svc上
现在通过域名进行暴露
解析到vip上
负载均衡
加密认证重定向
现在想通过443端口HTTPS方式(加密)来访问服务
原本的yaml
开启tls加密
开启集群,生成key
用生成的证书和key创建tls-secrets(secrets对应密钥)
两个域名都用下面的tls-secret加密方法
没有定义后端默认页会显示404
一旦启动加密,就是自动重定向
说明加密生效
认证
存入认证信息
其实是一个base64的编码格式
annotation参数
Annotation,顾名思义,就是注解。Annotation可以将Kubernetes资源对象关联到任意的非标识性元数据。使用客户端(如工具和库)可以检索到这些元数据。Annotation与Label类似,也使用key/value键值对的形式进行定义。不同的Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并且用于Label Selector。而Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找,很多时候,Kubernetes的模块自身会通过Annotation的方式标记资源对象的特殊信息。
401是需要认证
重写功能
重定向到一个路径