九、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的请求进行处理

相关推荐
小白跃升坊11 分钟前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey29 分钟前
【Linux】线程同步与互斥
linux·笔记
舰长11532 分钟前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀37 分钟前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng1 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.1 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
VekiSon1 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
zl_dfq2 小时前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux
Ankie Wan2 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
skywalk81632 小时前
尝试在openi启智社区的dcu环境安装ollama最新版0.15.2(失败)
linux·运维·服务器·ollama