在Kubernetes(K8S)中部署Docker容器时,经常需要使用Nginx作为反向代理服务器来实现负载均衡和路由。本文将教你如何在Docker中配置Nginx,并在K8S中进行部署。

## 流程

| 步骤 | 需要做什么 |
| ---- | ---------- |
| 1 | 编写Nginx配置文件 |
| 2 | 构建Docker镜像 |
| 3 | 将Docker镜像推送至镜像仓库 |
| 4 | 在K8S中定义Nginx服务 |

### 步骤一:编写Nginx配置文件

首先,在你的项目目录下创建一个名为`nginx.conf`的Nginx配置文件,示例如下:

```nginx
server {
listen 80;
server_name localhost;

location / {
proxy_pass http://backend-service:8080; # 将请求转发至后端服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```

在上面的配置文件中,我们指定Nginx监听在80端口,并将请求转发至名为`backend-service`的后端服务。

### 步骤二:构建Docker镜像

接下来,创建一个`Dockerfile`文件用于构建Nginx的Docker镜像,内容如下:

```Dockerfile
FROM nginx:latest

COPY nginx.conf /etc/nginx/nginx.conf # 将本地Nginx配置文件复制到容器内
```

在该Dockerfile中,我们使用了`nginx:latest`作为基础镜像,然后将本地的`nginx.conf`配置文件复制到容器内的`/etc/nginx/nginx.conf`路径下。

### 步骤三:将Docker镜像推送至镜像仓库

在构建完成Docker镜像后,可以将其推送至Docker镜像仓库,以供在K8S中使用。首先登录Docker镜像仓库,然后进行如下操作:

```bash
docker build -t your-registry.com/your-nginx-image:latest .
docker push your-registry.com/your-nginx-image:latest
```

这里替换`your-registry.com/your-nginx-image`为你的镜像仓库地址和镜像名称。

### 步骤四:在K8S中定义Nginx服务

最后,在K8S中定义Nginx的Deployment和Service,并引用之前推送至镜像仓库的Nginx镜像,示例如下:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: your-registry.com/your-nginx-image:latest
ports:
- containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
```

在上述示例中,我们定义了一个包含3个副本的Nginx Deployment,并创建了一个Nginx Service,该Service将流量引入到Nginx Deployment中。

通过以上步骤,你已经成功配置了Nginx并在K8S中部署了该Nginx服务,可以通过K8S的负载均衡器访问该服务。希望这篇文章对你有所帮助,祝你在K8S和Docker的学习和应用中取得成功!