在Kubernetes(K8S)中,untagged端口和tagged端口是用于容器之间通信的两种不同的端口类型。在选择untagged端口和tagged端口时,我们需要考虑到网络通信的需求和容器之间的关系。下面我将详细介绍untagged端口与tagged端口的选择及使用。

### 1. 定义:
- **Untagged端口**:没有任何vlan信息,只能接收和发送未标记的数据包。
- **Tagged端口**:接受和发送vlan信息的数据包,可以支持多个vlan。

### 2. 流程:
| 步骤 | 操作 |
| --- | --- |
| 1 | 创建Pod和Service |
| 2 | 选择端口类型 |
| 3 | 部署Pod和Service |

### 3. 操作步骤及代码示例:

#### 步骤1:创建Pod和Service
首先,我们需要创建一个Pod和对应的Service,以便测试端口选择。

```yaml
# mypod.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginx

# mysrv.yaml
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
```

#### 步骤2:选择端口类型
在Service的端口定义中,我们可以选择使用untagged端口或tagged端口,具体取决于我们的网络架构和需求。

- **Untagged端口**:在Service的端口定义中不指定vlan信息。
```yaml
# myuntaggedservice.yaml
apiVersion: v1
kind: Service
metadata:
name: myuntaggedservice
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
```

- **Tagged端口**:在Service的端口定义中指定vlan信息。
```yaml
# mytaggedservice.yaml
apiVersion: v1
kind: Service
metadata:
name: mytaggedservice
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30001 # 指定vlan信息
```

#### 步骤3:部署Pod和Service
使用kubectl apply命令分别部署上述定义的Pod和Service。

```bash
kubectl apply -f mypod.yaml
kubectl apply -f mysrv.yaml
kubectl apply -f myuntaggedservice.yaml
kubectl apply -f mytaggedservice.yaml
```

### 总结:
在Kubernetes中,选择untagged端口和tagged端口取决于网络配置和通信需求。untagged端口适用于简单的网络环境,不涉及多个vlan的场景;而tagged端口则适用于需要支持多个vlan的复杂网络架构。在实际部署时,根据具体情况选择合适的端口类型,可以更好地满足项目的需求。

希望通过本文,初学者能够理解untagged端口与tagged端口的选择及使用方法,在实际工作中能够根据需求正确配置端口类型,顺利完成容器间的通信。如果有任何疑问或者需要进一步的帮助,欢迎随时与我联系,共同学习进步!