九、k8s:ingress

k8s对外服务之ingress:

service的作用:

NodePort:会在每个节点开放一个端口,端口号30000-32767。

也是只能用于内网访问,四层转发。实现负载均衡。不能基于域名进行访问。

clusterip:service的默认类型,只能在集群内部访问

loadBalancer:基于云平台的实现的,需要有loadBalancer的地址,仅限于云平台

externallPS:service允许分配外部ip,把外部ip路由集中到集群的一个或者多个node节点

ingress:只需要一个或者少量的公网ip地址或者是loadBalancer的地址,就可以实现将多个http的服务,暴露到外网,七层代理,service的service,基于域名和URL路径,把用户的请求转发到一个或者多个service的规则。

ingress的组成:

ingress只能通过yaml文件配置,其实ingress是一种规则,根据ingress的配置匹配到指定service,service再把访问ingress的基于域名的连接流量转发到service匹配的pod。

ingress-controller:不是k8s自带的组件,第三方的软件,不管是哪一种ingress-controller机制都一样的,没有任何区别,都是以pod的形式运行在集群当中。

ingress-nginx-------------主流的方式

traefik------------->图形化的ui,直观。

ingress-controller暴露服务的方式:

ingress-nginx

traefik

第一种:

deployment+loabBalancer

你把ingress部署在公有云,可以采用这种方式,loadBalancer会为service自动创建一个负载均衡器,只要域名解析指向到loadBalancer的地址,就可以实现集群的对外访问

第二种:

daemonSET+hostNetworkrk+nodeSelector:

ingress-controller会直接使用宿主机的网络和端口,一个node节点只能部署一个ingress-controller的pod。 适用于大并发的生产环境。

第三种:

deployment+Nodeport部署

deployment部署也会执行一个ingress-controller的pod,pod也会对应一个service,service的模式是NodePort,分别对应80和443

80----------》http--------------30000-32767

443---------》https-----------30000-32767

还需要再额外部署一个service,转发到pod。这种方式又会多了一层转发的请求,请求量极大,性能会有一定影响。

转发方式:NAT(地址转发)

daemonSET+hostNetworkrk+nodeSelector部署

做个标签

8181:nginx-controller默认配置的后台转发的端口,ingree没有匹配到规则时,使用的默认端口。

允许

pvc

deployment+Nodeport部署

https是什么:

就是http的加密版就是https,默认端口是443

加密方式:SSL/TLS协议实现加密认证

SSL已经淘汰,TLS证书是主流

TLS的组成:

记录协议(record protocol):负责数据传输的可靠性

握手协议(handshake Security):建立安全连接的过程

TSL的作用:

1、数据加密:使用对称密钥加密通信的内容

2、认证:通过数字证书验证服务器的身份

服务端和客户端之间都要认证。证书可以自定义,也可以在专门的数字证书网站获取

3、完整性检查:防止第三方对数据进行篡改

https数据流向:

1、客户端发起请求------>百度

请求的方式是https,请求的方法get

请求建立连接:三次握手

2、TLS/SSL的握手过程:

客户端-------->发送支持tls版本的加密套件列表(证书和私钥文件)

服务端-------->服务端选择一个双方都支持的TLS的证书和私钥等等,生成一个数字证书

客户端-------->客户端收到服务端的证书之后,验证证书的有效性(签发证书人是否合法,过期时间等等)

客户端生成预定的密钥(TLS),和服务器交换密钥,服务端验证密钥的有效性,已经密钥是否正确

TLS的握手过程完成

3、建立安全连接:

使用协商好的加密算法和密钥对后续的数据进行加密传输

4、关闭TLS连接,释放资源然后四次挥手断开连接

https部署实现的过程:

1、先在集群内生成证书

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

openssl:签发ssl证书

req:执行证书的请求已经生产相关的文件

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

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

-node:表示生成的私钥不加密

-days 365:证书的有效期时间365天

-newkey rsa:2048 :表示生成密钥对是RSA加密的,长度是2048位

-keyout tls.key -out tls.crt:生成的密钥对,保存到tls.crt文件中

-out tls.crt:证书保存到tls.crt文件中

-subj "/CN=nginxsvc/O=nginxsvc":为证书添加一个主题cn证书的名称 O:组织关系

证书:用于加密和认证网络通信的数字证书,证明服务器的身份。确保客户端连接到的服务器是合法的。协商加密的密钥,保证通信过程中数据的安全。

公钥,组织信息,数字签名等等,证书颁发机构签发的。

私钥:对服务器的证书进行数字签名,同时用于解密客户端发送的加密数据,私钥只有服务端才能够访问与证书匹配的私钥文件。

容器内抓包

1、获取docker的container id

2、根据containerid获取docker的进程号

docker inspect --format '{{.State.Pid}}' a9af52be75d17d7a97e0453ff5a721ff1bc4c5ecaf27519772b2d270320c49f6

3、进入这个容器的网络命令空间

nsenter-n-t pid号

4、tcpdump -i容器的网卡名

ingress:

1、基于用户名和密码实现登录的认证

已创建的要先删除再创建

2、页面跳转,重定向。

traefik

ingress-controller的另一种插件,和nginx-ingress大同小异

也是部署微服务更快捷的http反向代理和负载均衡,以及7层代理。

nginx-ingress需要不断的请求k8s的api,获取终端的变化,

traefik自动的实时更新,可以完全同步获取k8s的api的更新结果,和k8s的适配度更高

nginx-ingree:处理大并发环境更优秀

traefik:一般用于小的集群,并发量不是那么大的请求环境。

traefik的部署方式:

deployment+nodeport----------->内部服务

loadbalancer+deployment--------------->公有云支持

daemonset+hostnetwork+nodeselector------------>面向外部服务

4按照顺序部署

总结:

ingress是外部进入k8s集群的入口,可以理解为service的service,ingress使用的时候,域名,匹配到可用的service。

ingress是做7层转发,可以对http/https的请求进行处理

相关推荐
厦门德仔4 分钟前
【Docker】如何在Linux、Windows、MacOS中安装Docker
linux·macos·docker
ckanhw20 分钟前
ubuntu windows双系统踩坑
linux·运维·ubuntu
byte轻骑兵25 分钟前
【嵌入式Linux应用开发基础】进程间通信(2):消息队列
linux·c语言·嵌入式软件
老友@1 小时前
Docker 部署 OnlyOffice 文档服务器
运维·服务器·后端·docker·容器·编辑器·onlyoffice
童先生1 小时前
吐血整理:在 Docker 中运行 Milvus
数据库·docker·容器·milvus
Koma_zhe2 小时前
【搭建SigNoz性能监控平台】在Ubuntu上快速搭建高效的SigNoz性能监控平台与远程使用技巧
linux·运维·ubuntu
xxxx1234452 小时前
Ubuntu中出现对control.tar.zst未知压缩
linux·运维·ubuntu
猎人everest2 小时前
Docker基础实践与应用举例
运维·docker·容器
淳杰2 小时前
ubuntu部署小笔记-采坑
linux·笔记·ubuntu
茂茂在长安2 小时前
Linux 命令大全完整版(12)
linux·运维·服务器·数据库·运维开发