什么是Kubernetes Ingress?
Ingress是K8s中的一个API对象,用于管理和配置外部对集群内服务的访问。它允许我们定义HTTP和HTTPS路由规则,将请求从集群外部的负载均衡器引导到相应的服务。Ingress的灵活性使得我们能够实现高级的应用程序路由、SSL终端和负载均衡等功能。
通过Ingress,我们可以将集群内的多个服务暴露到外部,并根据需要进行定制化的路由设置。这为应用的扩展和灵活部署提供了便利。
Ingress的基本结构
Ingress由以下几个主要组件构成:
规则(Rules): 每个Ingress对象可以包含多个规则,每个规则定义了一组路径匹配规则和与之关联的后端服务。
后端服务(Backend Services): 规则中指定的后端服务是Ingress路由请求到达时的目标服务。这可以是集群中的Service、Pod或外部服务。
路径(Paths): 路径定义了应该如何将请求路由到后端服务。可以使用通配符和正则表达式进行路径匹配。
TLS(Transport Layer Security): Ingress还支持TLS,用于启用HTTPS。TLS配置包括证书和密钥,确保数据在传输过程中的安全性。
Ingress 资源对象 ,kubernetes的一个资源对象,用于编写 资源 配置规则;
Ingress配置规则 控制器通过service服务发现机制,动态实现后端Pod路由转发规则的实现;
Ingress Controller,Ingress控制器
ingress-controller,调用k8s的api动态感知集群中Pod的变化而动态更新配置文件,并重载proxy 反向代理负载均衡器 的配置
ingress-controller监听apiserver,获取服务新增,删除等变化,并结合ingress规则动态更新到反向代理负载均衡器上,并重载配置使其生效
proxy 反向代理负载均衡器 ,接收并按照ingress定义的规则进行转发,通常为nginx,haproxy,traefik等,常用的是 Ingress-nginx
反向代理负载均衡器,实现七层转发的Edge Router 边沿路由器,proxy 通过ingress-controller,proxy 需要ingress-controller监听apiserver,感知集群中Pod的变化而动态更新配置文件,
通常以DaemonSets或Deployments的形式部署,并对外暴露80和443端口,
对于DaemonSets来说,一般是以hostNetwork或者hostPort的形式暴露,
对于Deployments来说则以NodePort的方式暴露,控制器的多个节点则借助外部负载均衡ExternalLB以实现统一接入;
Ingress HTTPS 代理访问
mkdir /opt/ingress-nodeport/httpstom
cd /opt/ingress-nodeport/httpstom
创建ssl证书
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=www3.tomxcz.com/O=tomcatsvc"
创建 secret 资源进行存储
kubectl create secret tls tlstom-secret --key tls.key --cert tls.crt
kubectl get secret
创建 deployment、Service、Ingress Yaml 资源
vim ingress-https.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-app
spec:
replicas: 2
selector:
matchLabels:
name: tomcat
template:
metadata:
labels:
name: tomcat
spec:
containers:
- name: tomcat
image: tomcat:9
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: tomcat-svc
spec:
ports:
- port: 8080
targetPort: 8080
protocol: TCP
selector:
name: tomcat
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tomcat-https
spec:
tls:
- hosts:
- www3.tomxcz.com
secretName: tlstom-secret
rules:
- host: www3.tomxcz.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: tomcat-svc
port:
number: 8080
kubectl apply -f ingress-https.yaml
kubectl get svc
访问测试
在宿主机的 C:\Windows\System32\drivers\etc\hosts 文件中添加 192.168.99.172 www3.tomxcz.com 记录。
使用谷歌浏览器访问 https://www3.tomxcz.com