Kubernetes (K8S) 是一种用于自动化部署、扩展和管理容器化应用程序的开源系统。在K8S中,我们可以通过端口映射实现将容器内部的端口映射到外部的端口,从而可以让外部用户访问到容器中运行的应用程序。

下面将向你介绍如何将容器内的80端口映射到外网,以便外部用户可以通过该端口访问你的应用程序。

### 实现80端口映射到外网的流程

| 步骤 | 操作 |
| ------- | ----------- |
| 1 | 编写一个包含应用程序的 Docker 镜像 |
| 2 | 使用 Kubernetes 创建 Deployment 对象 |
| 3 | 创建一个 Service 对象,将 80 端口暴露出来 |
| 4 | 创建一个 Ingress 对象,配置域名和路径到 Service |

### 操作步骤及代码示例

#### 步骤 1: 编写 Docker 镜像

首先,你需要编写一个 Dockerfile 文件,指定如何构建你的应用程序镜像。

```Dockerfile
# 使用官方的 nginx 镜像作为基础镜像
FROM nginx:latest

# 拷贝应用程序文件到镜像内
COPY index.html /usr/share/nginx/html/index.html
```

#### 步骤 2: 创建 Deployment 对象

接下来,你需要创建一个 Deployment 对象,用于部署你的应用程序容器。

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: your-registry/my-app:latest
ports:
- containerPort: 80
```

#### 步骤 3: 创建 Service 对象

然后,你需要创建一个 Service 对象,将 80 端口暴露出来,以便能够从外部访问到该端口。

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

#### 步骤 4: 创建 Ingress 对象

最后,你需要创建一个 Ingress 对象,配置域名和路径到 Service,以便可以通过域名访问你的应用程序。

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

通过以上步骤的操作,你就成功地将容器内的80端口映射到外网,外部用户可以通过你配置的域名和路径访问你的应用程序了。

希望以上内容能够帮助你理解并成功实现端口映射到外网的操作。如果有任何疑问,欢迎随时向我提问!