### 流程概述
下面是实现K8s外部直接连接容器IP的简要流程:
| 步骤 | 操作 |
| ---- | ---- |
| 1. | 构建一个暴露容器端口的服务 |
| 2. | 获取服务的IP地址和暴露的端口号 |
| 3. | 使用获取的IP地址和端口号连接到容器 |
下面详细介绍每一步的操作以及相应的代码示例。
### 步骤1:构建一个暴露容器端口的服务
在K8s中,我们可以通过Service对象来定义一个服务。Service可以将多个Pod的地址和端口封装为一个可通过网络访问的虚拟服务。我们可以在Service对象的配置中指定需要暴露的Pod的端口号。
下面是一个示例的Service的配置文件(service.yaml):
```yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: 80
selector:
app: my-app
```
上面的配置文件中,`port`是Service向外暴露的端口号,`targetPort`是将请求转发到Pod的端口号。
你可以使用以下命令来创建上述的Service:
```bash
kubectl apply -f service.yaml
```
### 步骤2:获取服务的IP地址和暴露的端口号
一旦Service创建成功,我们可以使用以下命令来获取该Service的IP地址和暴露的端口号:
```bash
kubectl get service my-service
```
你将会看到类似如下的输出:
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service NodePort 10.107.12.227
```
上面的输出中,`CLUSTER-IP`是Service的IP地址,`PORT(S)`值是Kubernetes集群内部使用的端口,`8080:31692/TCP`表示该Service将本地的8080端口转发到容器的31692端口。
### 步骤3:使用获取的IP地址和端口号连接到容器
现在我们已经获取到了需要连接的容器的IP地址和端口号,我们可以使用这些信息来直接连接到容器。
你可以使用以下命令来连接到容器:
```bash
kubectl port-forward svc/my-service 8080:31692
```
上述命令将会把本地的8080端口与K8s集群内的容器的31692端口建立映射。这样你就可以通过`http://localhost:8080`来访问容器。
> 注意:在使用上述命令连接容器之前,需要确保本地已经安装了kubectl命令,并且Kubernetes集群能够正常访问。
以上就是如何实现K8s外部直连容器IP的步骤和代码示例。通过构建一个暴露容器端口的Service,获取其IP地址和端口号,然后使用端口映射命令连接到容器,我们就可以方便地在K8s外部访问容器了。
希望本文可以帮助到刚入行的小白,让他们更好地理解和使用Kubernetes。