Kubernetes Ingress 入门指南:简化集群服务访问

什么是 Kubernetes Ingress

Kubernetes Ingress 是一种 API 资源,用于管理集群外部访问集群内部服务的方式。它提供了 HTTP 和 HTTPS 路由功能,使外部流量能够访问集群内部的服务。Ingress 可以配置基于主机名和路径的路由规则,将外部请求定向到集群内部的服务,并支持负载均衡、SSL 终止等功能。

Ingress 示例

下面是一个简单的 Ingress 配置示例,用于将流量路由到不同的服务:

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /service1
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
      - path: /service2
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80

什么情况下使用 Ingress

Ingress 在以下情况下尤其有用:

  • 多服务管理:当需要管理多个服务时,Ingress 提供了统一的入口控制,通过定义不同的路由规则,将流量分发到多个后端服务。
  • 基于域名和路径的路由:Ingress 可以根据域名或路径将请求路由到不同的服务,实现灵活的流量管理。
  • SSL 终止:Ingress 支持 SSL/TLS 证书配置,确保数据传输的安全性。

SSL/TLS 终止示例

要配置 SSL/TLS 终止,可以在 Ingress 资源中指定证书:

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ssl-ingress
spec:
  tls:
  - hosts:
    - example.com
    secretName: example-cert
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Ingress 解决的问题

Ingress 解决了以下问题:

  1. 统一入口:Ingress 提供了一个统一的入口点,简化了多服务的访问和管理。
  2. 七层负载均衡:Ingress 支持七层负载均衡,能够根据 HTTP/HTTPS 协议进行流量分发,这比传统的四层负载均衡更灵活。
  3. 减少基础设施成本:通过重用单个外部负载均衡器和 IP 地址,Ingress 可以为多个服务提供服务,降低了基础设施成本。
  4. 灵活的路由配置:Ingress 允许用户自定义路由规则,实现灵活的流量管理。

Ingress 的工作原理

Ingress 的工作原理涉及两个关键组件:

  • Ingress 资源:定义了主机名、路径和后端服务之间的映射关系。
  • Ingress 控制器:监控 Ingress 资源的变化,并配置代理服务器以实现路由和流量管理。常见的 Ingress 控制器包括 NGINX、Traefik 和 HAProxy 等。

Ingress 控制器安装示例

使用 Helm 安装 NGINX Ingress 控制器:

bash 复制代码
helm install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace

性能监控

Ingress 控制器的性能监控可以通过 Prometheus 和 Grafana 实现。常见的监控指标包括:

  • 请求处理时间 (nginx_ingress_controller_request_duration_seconds)
  • 响应大小 (nginx_ingress_controller_response_size)
  • 活动连接数 (nginx_ingress_controller_nginx_process_connections)。

示例代码

以下是使用 Python 的 requests 库测试 Ingress 路由的示例:

python 复制代码
import requests

def test_ingress_routing():
    url = "http://example.com/service1"
    headers = {"Host": "example.com"}
    response = requests.get(url, headers=headers)
    print(response.status_code)

test_ingress_routing()
相关推荐
血小板要健康11 小时前
Java基础常见面试题复习合集1
java·开发语言·经验分享·笔记·面试·学习方法
野犬寒鸦13 小时前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
我爱娃哈哈13 小时前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
李梨同学丶15 小时前
0201好虫子周刊
后端
思想在飞肢体在追15 小时前
Springboot项目配置Nacos
java·spring boot·后端·nacos
cyforkk15 小时前
09、Java 基础硬核复习:异常处理(容错机制)的核心逻辑与面试考点
java·数据库·面试
知识即是力量ol15 小时前
研发实战:Git 规范化开发全流程指南
git·gitee·github
知识即是力量ol17 小时前
Git 快速入门 (实习生视角)
git·gitee·github
Loo国昌17 小时前
【垂类模型数据工程】第四阶段:高性能 Embedding 实战:从双编码器架构到 InfoNCE 损失函数详解
人工智能·后端·深度学习·自然语言处理·架构·transformer·embedding
ONE_PUNCH_Ge18 小时前
Go 语言泛型
开发语言·后端·golang