在Kubernetes(K8S)集群中搭建高可用的Nginx是一个常见的需求,这可以通过使用Nginx Ingress Controller来实现。在本篇文章中,我将详细介绍如何在K8S集群中搭建高可用的Nginx,并展示每个步骤所需的代码示例。

### 搭建高可用Nginx在K8S集群中的步骤

下表展示了搭建高可用Nginx在K8S集群中的步骤:

| 步骤 | 描述 |
| -------- | -------- |
| 1 | 部署Nginx Ingress Controller |
| 2 | 配置Ingress资源 |
| 3 | 暴露Nginx服务 |
| 4 | 验证Nginx高可用性 |

### 搭建高可用Nginx在K8S集群中的具体步骤

#### 步骤 1: 部署Nginx Ingress Controller

在这一步,我们将部署Nginx Ingress Controller,并确保其高可用性。以下是所需的YAML文件示例:

```yaml
apiVersion: v1
kind: Namespace
metadata:
name: nginx-ingress

---

apiVersion: v1
kind: ServiceAccount
metadata:
name: nginx-ingress
namespace: nginx-ingress

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: nginx-ingress
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- pods
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- list
- watch

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: nginx-ingress
subjects:
- kind: ServiceAccount
name: nginx-ingress
namespace: nginx-ingress
roleRef:
kind: ClusterRole
name: nginx-ingress
apiGroup: rbac.authorization.k8s.io

---

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

#### 步骤 2: 配置Ingress资源

在这一步,我们将为我们的应用程序配置Ingress资源,以便Nginx Ingress Controller可以将流量路由到正确的服务。以下是一个示例Ingress资源配置:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: sample-service
port:
number: 80
```

#### 步骤 3: 暴露Nginx服务

在这一步,我们将通过Service暴露Nginx服务。以下是一个示例Service配置:

```yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx-ingress
type: LoadBalancer
```

#### 步骤 4: 验证Nginx高可用性

最后一步是验证我们搭建的Nginx在K8S集群中的高可用性。您可以使用curl命令测试Nginx服务是否正常运行。

以上是在K8S集群中搭建高可用Nginx的详细步骤和示例代码。希望这篇文章对您有所帮助,让您能够成功搭建高可用的Nginx在K8S集群中。如果您有任何疑问,请随时联系我。祝您成功!