在Kubernetes(K8S)中,要将内部IP地址映射到公网IP地址,实现公网访问服务,需要通过Service和Ingress来实现。下面我将为你详细介绍如何在K8S中实现IP地址开启公网映射的步骤。

### 步骤概览

首先,我们需要创建一个Service来暴露部署的Pods,然后创建一个Ingress对象来将公网流量路由到这个Service上。下面是实现这一步骤的具体内容:

| 步骤 | 操作 |
|------------------------|--------------------------------------------|
| **步骤一:** 创建Service | 通过创建Service来暴露部署的Pods |
| **步骤二:** 创建Ingress | 通过创建Ingress对象将公网流量路由到Service上 |

接下来我们将详细介绍每一步所需的操作和代码示例。

### 步骤一:创建Service

在这一步,我们将创建一个Service来将Pods暴露在集群外部。这里我们使用NodePort类型的Service,将Pods通过集群节点的IP和端口映射到外部。

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

- 在该YAML文件中,我们定义了一个NodePort类型的Service,名称为my-service。
- 使用selector来选择要映射的Pods,这里选择标签为"app: my-app"的Pods。
- 定义端口映射关系,将外部端口80映射到Pods的80端口。

执行以下命令来创建该Service:

```bash
kubectl apply -f service.yaml
```

### 步骤二:创建Ingress

在这一步,我们将创建一个Ingress对象来实现将公网流量路由到Service上。

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

- 在该YAML文件中,我们定义了一个Ingress对象,名称为my-ingress。
- 通过定义rules来指定访问的域名,这里示例是"example.com"。
- 指定访问的路径"/"会被路由到名为my-service的Service上。

执行以下命令来创建该Ingress对象:

```bash
kubectl apply -f ingress.yaml
```

通过以上步骤,我们成功将内部IP地址映射到公网IP地址,实现了公网访问服务。请记得将实际的域名绑定到公网IP地址上,并配置相关的DNS解析。

希望上述介绍能对你有所帮助,如有任何疑问请随时联系我。祝你在Kubernetes的学习路程中一帆风顺!