Kubernetes(简称K8s)是一个用于自动部署、扩展和管理容器化应用程序的开源平台。K8s中的Ingress是用来暴露集群中服务的一种资源类型。Nginx是一个高性能的HTTP和反向代理服务器,用于将请求转发到各个后端服务。在K8s中,有一个专门的Ingress Controller,它负责处理Ingress资源,并将请求转发到对应的服务。本文将介绍如何在K8s中部署Ingress-Nginx,并为你提供详细的代码示例。

以下是部署Ingress-Nginx的流程:

步骤|操作
-|-
1|安装Ingress Controller
2|创建Ingress资源
3|配置DNS

现在让我们一步步来实现吧。

### 步骤1:安装Ingress Controller

在K8s集群中安装Ingress Controller,可以通过以下的命令来实现:

```shell
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml
```

上述命令将从GitHub下载Ingress-Nginx的部署清单,并将其应用到集群中。请确保你具有足够的权限来执行此命令。

### 步骤2:创建Ingress资源

在创建Ingress资源之前,你需要确保已经有一个或多个部署了的Service。例如,我们创建一个名为`example`的Deployment和一个Service:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: example
spec:
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example
image: nginx:1.19-alpine
ports:
- containerPort: 80

---

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

将以上清单保存为`example.yaml`文件,并通过以下命令创建Deployment和Service:

```shell
$ kubectl apply -f example.yaml
```

接下来,我们将创建一个Ingress资源,将请求转发到`example-service`:

```yaml
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
```

将以上清单保存为`example-ingress.yaml`文件,并通过以下命令创建Ingress资源:

```shell
$ kubectl apply -f example-ingress.yaml
```

### 步骤3:配置DNS

在上一步中,我们将Ingress资源的host设置为`example.com`,你需要在本地`/etc/hosts`文件中添加一个对应的条目来让指定的域名解析到集群的IP地址。你可以打开`/etc/hosts`文件并添加以下条目:

```
<集群的IP地址> example.com
```

请将`<集群的IP地址>`替换为你实际的集群IP地址。

完成以上步骤后,你就可以通过`example.com`来访问集群中的服务了。

至此,我们已经完成了部署Ingress-Nginx的流程。通过Ingress-Nginx,你可以方便地在K8s集群中暴露和管理多个服务。

希望这篇文章对你有所帮助!如果你还有其他问题,请随时提问。