返回
轻松搞定K8S Ingress,告别端口占用烦恼!
后端
2022-12-15 00:45:44
Ingress:Kubernetes 中管理外部流量的强大工具
简介
在 Kubernetes 中,NodePort 和 LoadBalancer 两种方式常用于将 Service 暴露到外部网络。然而,这些方式存在一定局限性。Ingress 作为一种一站式解决方案,应运而生,旨在解决这些局限性,提供更简便、高效的外部流量管理方式。
Ingress 的优势
- 减少端口占用: Ingress 只需一个 NodePort 或 LoadBalancer,即可满足所有 Service 的对外服务需求,大幅减少集群机器端口占用。
- 提高资源利用率: Ingress 集中多个 Service 的流量到一个入口点,提升资源利用率。
- 简化管理: Ingress 统一管理所有 Service 的流量,显著简化管理工作。
Ingress Controller:Ingress 的守护者
Ingress Controller 是实现 Ingress 功能的组件。常见选择包括:
- Nginx Ingress Controller:流行、易用。
- Traefik Ingress Controller:高性能、功能丰富。
- Kong Ingress Controller:云原生 API 网关,安全性强、可扩展性高。
配置 Ingress
配置 Ingress 涉及创建 Ingress 资源和部署 Ingress Controller。
创建 Ingress 资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: my-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
此配置将创建一个名为 "my-ingress" 的 Ingress,主机名为 "my-domain.com"。它将流量转发到名为 "my-service" 的 Service 的 80 端口。
部署 Ingress Controller(以 Nginx 为例):
- 创建 Namespace:
kubectl create namespace ingress-nginx
。 - 添加 Helm 仓库:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
。 - 安装 Ingress Controller:
helm install ingress-nginx ingress-nginx --namespace ingress-nginx --set controller.replicaCount=2
。
总结
Ingress 是 Kubernetes 中管理外部流量的理想选择,它解决了 NodePort 和 LoadBalancer 方式的局限性,提供了更简便、高效的管理体验。通过使用 Ingress,可以轻松实现多个 Service 流量的路由和转发,提升资源利用率,简化管理流程。
常见问题解答
- 什么是 Ingress 的工作原理? Ingress 监听集群外部流量,根据定义的规则将流量路由到相应的 Service。
- Ingress 与 NodePort 和 LoadBalancer 有何区别? Ingress 只需一个端口或负载均衡器,而 NodePort 需要每个节点一个端口,LoadBalancer 每个 Service 需要一个负载均衡器。
- 如何为 Ingress 配置 SSL? 可以使用 TLS Ingress Gateway 或 cert-manager 等工具为 Ingress 配置 SSL。
- 如何使用 Ingress 实现 URL 重写? Ingress 允许通过其
rewrite-target
和use-regex
字段进行 URL 重写。 - Ingress 是否支持负载均衡? 是的,Ingress 支持负载均衡,可以将流量分布到多个 Service 副本。