引言

Kubernetes(简称K8s)是一个开源的容器编排平台,它提供了强大的服务发现、负载均衡和流量管理功能。Ingress是Kubernetes中用于管理外部到集群内部HTTP和HTTPS流量的API对象。本文将详细介绍K8s Ingress的部署过程,帮助您轻松实现集群内高效流量管理。

Ingress概述

Ingress的作用

Ingress的主要作用是:

  1. 提供集群外部的访问入口:允许集群外部的用户通过域名或URL路径访问集群内部的服务。
  2. 实现负载均衡:支持将流量分发到多个后端服务,提高系统的可用性和可扩展性。
  3. 提供基于路径的路由:根据请求的URL路径将流量转发到不同的服务。
  4. 支持TLS终止:通过Ingress资源可以配置TLS证书,实现安全的HTTPS通信。

Ingress与Service的关系

Ingress与Service的关系类似于反向代理服务器。Service为集群内部的服务提供稳定的IP和端口,而Ingress则负责将外部流量转发到对应的Service。

Ingress部署步骤

1. 准备Ingress控制器

首先,需要选择一个Ingress控制器。常见的Ingress控制器有Nginx、Traefik、HAProxy等。以下以Nginx Ingress为例进行说明。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-ingress-controller
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-ingress-controller
  template:
    metadata:
      labels:
        app: nginx-ingress-controller
    spec:
      containers:
      - name: nginx-ingress-controller
        image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.21.0
        ports:
        - containerPort: 80
        - containerPort: 443

2. 创建Ingress资源

创建一个Ingress资源,指定要访问的后端Service和域名。

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

3. 配置DNS记录

将域名指向集群的负载均衡器IP地址。

4. 验证Ingress

通过浏览器访问配置的域名,检查是否能够访问到对应的后端服务。

高级功能

1. TLS终止

在Ingress资源中配置TLS证书,实现安全的HTTPS通信。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  tls:
  - hosts:
    - example.com
    secretName: example-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 443

2. 路径重写

在Ingress资源中配置路径重写规则,实现URL路径的修改。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /new-path
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80
      - path: /old-path
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80

总结

通过本文的介绍,相信您已经掌握了K8s Ingress的部署方法。Ingress是Kubernetes中管理集群外部流量的重要工具,它可以帮助您轻松实现高效、安全的流量管理。在实际应用中,可以根据需求配置不同的Ingress资源,以满足不同的业务场景。