k8s访问容器内部端口的过程相对简单,需要经历一系列步骤。在此,我将以一个800字以上的科普文章的形式,为一名刚入行的小白详细解释这个过程,并提供代码示例。

## 1. 简介

在Kubernetes(简称K8S)中,每个容器都有自己的网络命名空间,并由K8S创建一个虚拟IP地址。容器可以通过该虚拟IP地址与其他容器进行通信。为了让K8S集群内的其他容器访问目标容器的内部端口,我们需要进行一些配置操作。下面是整个过程的简要流程,我们将逐步为你详细解释:

1. 确定目标容器的名称和命名空间。
2. 创建一个Service来公开该容器的端口。
3. 在Service中添加一个端口转发规则,将外部流量转发到目标容器的指定端口。

下面我们来逐步讲解这些步骤以及每一步需要做的事情。

## 2. 步骤解析

### 2.1 确定目标容器的名称和命名空间

首先,我们需要确定目标容器的名称和所在的命名空间。可以通过以下命令查看K8S集群中所有的Pod:

```shell
kubectl get pods
```

这将列出K8S集群中所有运行的Pod。根据你的具体情况,找到目标Pod的名称和所在的命名空间。

### 2.2 创建一个Service来公开容器的端口

下一步是创建一个Service来公开目标容器的端口。Service提供了一种持久的访问方式,以便其他容器或外部用户可以访问到目标容器。

我们可以使用以下命令创建一个名为`my-service`的Service,将流量转发到Pod `my-pod`(假设它是我们目标容器的名称):

```shell
kubectl create service clusterip my-service --tcp=MY_CONTAINER_PORT:TARGET_CONTAINER_PORT --dry-run=client -o yaml | kubectl apply -f -
```

- `my-service`:Service的名称,可以根据需求进行更改。
- `MY_CONTAINER_PORT`:你想要转发的目标容器内部的端口号。
- `TARGET_CONTAINER_PORT`:将转发到的目标容器的端口号。

请注意,在上述命令中,我们使用了`--dry-run=client -o yaml`参数来生成Service的配置文件,并通过`kubectl apply -f -`将其应用到K8S集群中。

### 2.3 在Service中添加端口转发规则

最后一步是在Service的配置文件中添加端口转发规则。我们可以编辑刚创建的Service的配置文件,添加以下内容:

```yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- name: my-service-forwarding
protocol: TCP
port: EXTERNAL_PORT
targetPort: MY_CONTAINER_PORT
```

- `my-service`:Service的名称,应与上一步中创建的Service名称保持一致。
- `EXTERNAL_PORT`:Service公开的外部端口号,可以根据实际需求进行更改。

保存并应用该配置文件:

```shell
kubectl apply -f my-service.yaml
```

这样,我们就完成了k8s访问容器内部端口的配置过程。

## 3. 总结

通过以上步骤,我们可以实现k8s访问容器内部端口的目标。首先,我们确定目标容器的名称和命名空间。然后,我们创建一个Service来公开容器的端口,并在Service中添加端口转发规则。通过这些配置,其他容器或外部用户就可以访问到目标容器的指定端口。

希望本文能帮助到刚入行的小白,也希望能为其他开发者提供一些参考。如果有任何疑问或建议,欢迎留言讨论。

附上一份完整的配置文件示例供参考:

```yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- name: my-service-forwarding
protocol: TCP
port: 8080
targetPort: 80
```
以上的配置示例表示将流量转发到Pod的80端口,并将Service公开到8080端口上。根据实际情况,你可以进行相应的更改。