Kubernetes——Kubernetes Ingress 配置文件解释
·
Ingress 是 Kubernetes 中的网络资源,用于管理外部 HTTP/HTTPS 流量进入集群的路由规则。它不像 Service 暴露端口,而是基于域名和路径智能路由流量到后端 Pod/Service,常用于微服务架构的 API 网关。
这个文件名为 mes-ingress,针对一个 MES(Manufacturing Execution System,制造执行系统)应用,定义了基于主机名 mes.local 的路由规则。将流量根据路径(如 /api/device)转发到不同的后端服务(如 device-service)。它假设您有 Ingress Controller(如 Nginx Ingress)已安装。
文件结构逐行解释
YAML 文件是分层的,以下是关键部分:
-
apiVersion 和 kind(资源版本和类型):
apiVersion: networking.k8s.io/v1 kind: Ingress- apiVersion:
networking.k8s.io/v1– 指定 Kubernetes API 组和版本(v1 是 Ingress 的稳定版本,支持 Kubernetes 1.19+)。 - kind:
Ingress– 声明这是一个 Ingress 资源,用于流量路由。
- apiVersion:
-
metadata(元数据):
metadata: name: mes-ingress- name:
mes-ingress– Ingress 的唯一名称,在命名空间中标识这个资源。应用时用kubectl apply -f mes-ingress.yaml创建。
- name:
-
spec(规范,核心配置):
spec: rules: - host: mes.local http: paths: - path: /api/device pathType: Prefix backend: service: name: device-service port: number: 8081- rules: 路由规则列表。这里只有一个规则,基于主机名(host)匹配。
- host:
mes.local– 匹配的域名。外部请求到http://mes.local时生效(需在 hosts 文件或 DNS 配置mes.local指向 Ingress IP)。 - http: HTTP 流量规则(不支持 HTTPS,除非添加 TLS 部分)。
- paths: 路径列表,按顺序匹配(前缀匹配)。
- path:
/api/device– 路径前缀。如果请求 URL 以/api/device开头(如/api/device/info),路由到后端。 - pathType:
Prefix– 匹配类型(前缀匹配;其他选项如 Exact 精确匹配)。 - backend.service: 后端目标。
- name:
device-service– Kubernetes Service 名(假设已存在,指向 device-service Pod)。 - port.number:
8081– Service 的目标端口(从之前 Docker Compose 上下文匹配)。
- name:
- path:
- host:
类似地,其他路径路由:
/api/production→production-service:8082(生产服务)。/api/trace→trace-service:8083(跟踪服务)。/api/predict→predict-service:8084(预测服务)。/→mes-frontend:80(根路径到前端,默认捕获所有未匹配流量)。
- rules: 路由规则列表。这里只有一个规则,基于主机名(host)匹配。
整体作用和使用
-
作用:在 Kubernetes 集群中,实现基于域名的路径路由。例如:
- 请求
http://mes.local/api/device/status→ 转发到 device-service 的 8081 端口。 - 请求
http://mes.local/→ 转发到 mes-frontend 的 80 端口(Web UI)。
这简化了微服务暴露,避免每个服务单独暴露端口,提高安全性和可管理性。
- 请求
-
部署步骤:
- 前提:集群有 Ingress Controller(如
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml)。 - 应用配置:
kubectl apply -f mes-ingress.yaml - 验证:
kubectl get ingress mes-ingress # 查看状态 kubectl describe ingress mes-ingress # 详细描述 - 访问:编辑本地
/etc/hosts添加127.0.0.1 mes.local,浏览器访问http://mes.local测试。 - 删除:
kubectl delete ingress mes-ingress。
- 前提:集群有 Ingress Controller(如
-
扩展建议:
- HTTPS:添加
tls部分和 Secret(证书)。 - 负载均衡:默认 Ingress 支持多后端 Pod 均衡。
- MES 上下文:结合之前Docker compose,这是从 Compose 迁移到 K8s 的 Ingress 配置,用于生产环境。
- HTTPS:添加
更多推荐
所有评论(0)