在Kubernetes(K8S)中,端口映射是一种常见的操作,它允许服务在Pod内部网络和外部网络之间进行通信。当我们需要将外部流量导向到K8S集群内的特定服务时,我们可以通过端口映射来实现这一目的。但是,为了确保端口映射的稳定性和持久性,我们需要进行端口映射的固化操作,即将端口映射信息保存在K8S资源中,以便在Pod重新启动或集群重启时能够保持映射关系。

接下来,我将向你介绍如何在K8S中实现端口映射固化的步骤,并提供相应的代码示例。

### 步骤概览

首先,我们需要创建一个Service资源,将外部端口和内部端口进行映射,然后创建一个Ingress资源,将外部流量导向到该Service上。最后,我们可以使用ingress-nginx控制器来负责Ingress资源的实现。

下面是实现端口映射固化的详细步骤:

| 步骤 | 操作 |
| ---- | ------------ |
| 1 | 创建Service |
| 2 | 创建Ingress |
| 3 | 部署ingress-nginx控制器 |

### 代码示例

#### 步骤1:创建Service

首先,我们需要创建一个Service资源,将外部端口和内部端口进行映射。

```yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
labels:
app: my-app
spec:
type: NodePort
ports:
- port: 80 # 外部端口
targetPort: 8080 # 内部端口
nodePort: 30080 # NodePort
selector:
app: my-app
```

在上面的代码中,我们创建了一个名为`my-service`的Service资源,将外部端口80映射到内部端口8080,并指定NodePort为30080。

#### 步骤2:创建Ingress

接下来,我们需要创建一个Ingress资源,将外部流量导向到Service上。

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

在上面的代码中,我们创建了一个名为`my-ingress`的Ingress资源,将访问`example.com`的流量导向到`my-service`的端口80。

#### 步骤3:部署ingress-nginx控制器

最后,我们需要部署ingress-nginx控制器来实现Ingress资源。

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

通过上述步骤,我们成功地实现了Kubernetes中端口映射的固化操作。现在,我们可以通过访问`example.com`来访问我们的服务。

希望这篇文章能够帮助你理解并实现K8S端口映射固化的操作。如果有任何问题,请随时向我提问。祝你学习顺利!