在Kubernetes(K8s)中,Ingress是一种API对象,用于将外部HTTP和HTTPS流量路由到集群内的服务。它允许集群外的用户访问集群内的服务,同时可以根据不同的路径或主机名将流量路由到不同的服务。

下面我们将详细介绍如何在Kubernetes集群中设置Ingress来实现流量路由。

**步骤概述:**

| 步骤 | 描述 |
|-----|--------------------------------------------------|
| 1 | 安装和配置Ingress Controller |
| 2 | 创建Ingress资源 |
| 3 | 部署应用程序和Service |
| 4 | 测试Ingress设置是否生效 |

**步骤详解:**

1. **安装和配置Ingress Controller**

首先,我们需要安装并配置Ingress Controller。在Kubernetes中,有多种Ingress Controller可供选择,比如nginx-ingress、Traefik、HAProxy等。这里我们以nginx-ingress为例进行说明。

```bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
```

以上命令将会部署nginx-ingress Controller到集群中。

2. **创建Ingress资源**

接下来,我们需要创建Ingress资源,来定义路由规则。例如,我们要将路径`/app`路由到名为`webapp`的Service上。

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- http:
paths:
- path: /app
pathType: Exact
backend:
service:
name: webapp
port:
number: 80
```

以上示例中,我们创建了一个Ingress资源,指定了路径为`/app`时通过Ingress路由到名为`webapp`的Service的80端口上。

3. **部署应用程序和Service**

接下来,我们需要部署一个应用程序和对应的Service。以`webapp`为例:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
...
---
apiVersion: v1
kind: Service
metadata:
name: webapp
spec:
selector:
app: webapp
ports:
- port: 80
targetPort: 80
```

这样我们就部署了一个名为`webapp`的应用程序和Service。

4. **测试Ingress设置是否生效**

最后,我们可以通过浏览器或curl等工具来测试Ingress设置是否生效。假设我们的集群有外部IP地址`EXTERNAL_IP`,可以使用以下命令测试:

```bash
curl -L http://EXTERNAL_IP/app
```

如果返回了`webapp`应用程序的响应内容,则表示Ingress设置生效。

通过以上步骤,我们成功地在Kubernetes集群中实现了Ingress的设置,实现了外部流量的路由。希望这篇文章能帮助你快速掌握如何在Kubernetes中使用Ingress。