在Kubernetes(K8S)中,部署多个项目在同一个域名下使用Nginx是一种常见的做法,它可以使多个项目能够共享同一个域名,并通过Nginx进行流量的分发。下面我将介绍如何在K8S中实现这一需求,帮助你快速掌握这个技巧。

## 实现“nginx 同一个域名部署多个项目”的流程

| 步骤 | 操作 |
|--------|--------|
| 1 | 创建两个 Deployment 资源,分别对应不同的项目 |
| 2 | 创建一个 Service 资源,并将两个 Deployment 通过 Service 暴露出来 |
| 3 | 创建一个 Ingress 资源,配置域名与路径的映射 |
| 4 | 部署一个 Nginx Ingress Controller 用于实现 Ingress 资源的规则转发 |

现在让我们一步步来实现上面的操作:

### 步骤一:创建两个 Deployment 资源

首先,我们需要分别创建两个 Deployment 资源,这里分别以项目1和项目2为例。以下是创建 Deployment 资源的示例代码:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: project1
spec:
replicas: 1
selector:
matchLabels:
app: project1
template:
metadata:
labels:
app: project1
spec:
containers:
- name: project1
image: your_project1_image

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: project2
spec:
replicas: 1
selector:
matchLabels:
app: project2
template:
metadata:
labels:
app: project2
spec:
containers:
- name: project2
image: your_project2_image
```

### 步骤二:创建一个 Service 资源

接下来,我们创建一个 Service 资源来暴露两个 Deployment,让它们可以被 Ingress 访问到。以下是创建 Service 资源的示例代码:

```yaml
apiVersion: v1
kind: Service
metadata:
name: project-service
spec:
selector:
app: project1 # 选择需要暴露的 Deployment
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: project-service
spec:
selector:
app: project2 # 选择需要暴露的 Deployment
ports:
- protocol: TCP
port: 80
targetPort: 80
```

### 步骤三:创建一个 Ingress 资源

然后,我们需要创建一个 Ingress 资源,配置域名与路径的映射,以便 Nginx Ingress Controller 可以根据这些规则进行流量转发。以下是创建 Ingress 资源的示例代码:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: project-ingress
spec:
rules:
- host: yourdomain.com # 配置需要映射的域名
http:
paths:
- path: /project1 # 配置项目1的访问路径
pathType: Prefix
backend:
service:
name: project-service
port:
number: 80
- path: /project2 # 配置项目2的访问路径
pathType: Prefix
backend:
service:
name: project-service
port:
number: 80
```

### 步骤四:部署一个 Nginx Ingress Controller

最后,我们需要部署一个 Nginx Ingress Controller,它会根据 Ingress 资源的定义来进行流量的转发。你可以使用 Helm 来部署 Nginx Ingress Controller,以下是 Helm 命令示例:

```bash
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-ingress-nginx ingress-nginx/ingress-nginx
```

通过以上步骤,你就成功实现了在K8S中使用Nginx部署多个项目在同一个域名下的目标。希望这篇科普文章对你有所帮助,如果有任何疑问,欢迎随时向我提问。祝你工作顺利!