Kubernetes (K8S) 是一种用于自动化容器化应用程序的开源平台,而在实际应用中,我们通常需要将一些服务暴露给外部用户。K8S 提供了多种方式来实现这一目的,比如 NodePort、LoadBalancer、Ingress 等。在本篇文章中,我将介绍如何通过 Ingress 实现 K8S 对外提供服务方案。

### 流程概要:

| 步骤 | 操作 |
|---|---|
| 1 | 安装 Ingress Controller |
| 2 | 创建 Ingress 资源 |
| 3 | 部署应用到 K8S 集群 |
| 4 | 配置域名解析 |
| 5 | 访问应用服务 |

### 详细步骤:

#### 步骤 1:安装 Ingress Controller

首先我们需要安装 Ingress Controller,如 Nginx Ingress Controller。执行以下命令:

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

这将安装 Nginx Ingress Controller 到集群中,并将其暴露为 NodePort 服务以便外部访问。

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

然后我们需要创建 Ingress 资源,指定要暴露的服务和规则。以下是一个示例 Ingress 资源配置文件:

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

#### 步骤 3:部署应用到 K8S 集群

接下来,我们需要将我们的应用部署到 K8S 集群中。例如,我们可以部署一个简单的 Nginx 服务:

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

然后创建 Service 对象,暴露 Deployment:

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

#### 步骤 4:配置域名解析

在部署完成后,我们需要将域名解析指向集群的 Ingress Controller 的 IP 地址。可以通过修改 DNS 记录或者在本地 hosts 文件中添加一条映射。

#### 步骤 5:访问应用服务

最后,打开浏览器并访问刚刚配置的域名,即可通过 Ingress 访问我们的应用服务。

通过上述步骤,你已经成功实现了通过 Ingress 将 K8S 中的服务对外提供访问的方案。希望以上内容对你有所帮助!如果还有任何疑问,欢迎随时向我提问。