apiVersion: v1
kind: Pod
metadata:
namespace: project1
name: example-pod
spec:
containers:
- name: example-pod
...
ports:
- containerPort: 30100
name: sctpserver
protocol: SCTP
作为集群管理员,您可以在裸机集群上使用流控制传输协议 (SCTP)。
作为集群管理员,您可以在集群中的主机上启用 SCTP。在 Red Hat Enterprise Linux CoreOS (RHCOS) 上,SCTP 模块默认情况下处于禁用状态。
SCTP 是一种可靠的消息型协议,运行在 IP 网络之上。
启用后,您可以将 SCTP 用作具有 Pod、服务和网络策略的协议。必须定义一个 `Service` 对象,并将 `type` 参数设置为 `ClusterIP` 或 `NodePort` 值。
您可以通过将 Pod 或服务对象中的 `protocol` 参数设置为 `SCTP` 值来配置 Pod 或服务以使用 SCTP。
在以下示例中,Pod 配置为使用 SCTP
apiVersion: v1
kind: Pod
metadata:
namespace: project1
name: example-pod
spec:
containers:
- name: example-pod
...
ports:
- containerPort: 30100
name: sctpserver
protocol: SCTP
在以下示例中,服务配置为使用 SCTP
apiVersion: v1
kind: Service
metadata:
namespace: project1
name: sctpserver
spec:
...
ports:
- name: sctpserver
protocol: SCTP
port: 30100
targetPort: 30100
type: ClusterIP
在以下示例中,`NetworkPolicy` 对象配置为应用于来自具有特定标签的任何 Pod 的端口 `80` 上的 SCTP 网络流量
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-sctp-on-http
spec:
podSelector:
matchLabels:
role: web
ingress:
- ports:
- protocol: SCTP
port: 80
作为集群管理员,您可以加载并在集群中的工作节点上启用列入黑名单的 SCTP 内核模块。
安装 OpenShift CLI (oc
)。
作为具有 `cluster-admin` 角色的用户访问集群。
创建一个名为 `load-sctp-module.yaml` 的文件,其中包含以下 YAML 定义
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
name: load-sctp-module
labels:
machineconfiguration.openshift.io/role: worker
spec:
config:
ignition:
version: 3.2.0
storage:
files:
- path: /etc/modprobe.d/sctp-blacklist.conf
mode: 0644
overwrite: true
contents:
source: data:,
- path: /etc/modules-load.d/sctp-load.conf
mode: 0644
overwrite: true
contents:
source: data:,sctp
要创建 `MachineConfig` 对象,请输入以下命令
$ oc create -f load-sctp-module.yaml
可选:要在 MachineConfig 操作符应用配置更改时监视节点的状态,请输入以下命令。当节点的状态转换为 `Ready` 时,配置更新将应用。
$ oc get nodes
您可以通过创建一个运行监听 SCTP 流量的应用程序的 Pod,将其与服务关联,然后连接到公开的服务来验证 SCTP 是否在集群中工作。
从集群访问互联网以安装 `nc` 包。
安装 OpenShift CLI (oc
)。
作为具有 `cluster-admin` 角色的用户访问集群。
创建一个启动 SCTP 监听器的 Pod。
创建一个名为 `sctp-server.yaml` 的文件,其中定义了以下 YAML 内容的 Pod。
apiVersion: v1
kind: Pod
metadata:
name: sctpserver
labels:
app: sctpserver
spec:
containers:
- name: sctpserver
image: registry.access.redhat.com/ubi9/ubi
command: ["/bin/sh", "-c"]
args:
["dnf install -y nc && sleep inf"]
ports:
- containerPort: 30102
name: sctpserver
protocol: SCTP
输入以下命令创建 Pod:
$ oc create -f sctp-server.yaml
为 SCTP 监听器 Pod 创建一个服务。
创建一个名为 `sctp-service.yaml` 的文件,其中定义了以下 YAML 内容的服务。
apiVersion: v1
kind: Service
metadata:
name: sctpservice
labels:
app: sctpserver
spec:
type: NodePort
selector:
app: sctpserver
ports:
- name: sctpserver
protocol: SCTP
port: 30102
targetPort: 30102
输入以下命令创建服务:
$ oc create -f sctp-service.yaml
为 SCTP 客户端创建一个 Pod。
创建一个名为 `sctp-client.yaml` 的文件,其中包含以下 YAML 内容。
apiVersion: v1
kind: Pod
metadata:
name: sctpclient
labels:
app: sctpclient
spec:
containers:
- name: sctpclient
image: registry.access.redhat.com/ubi9/ubi
command: ["/bin/sh", "-c"]
args:
["dnf install -y nc && sleep inf"]
输入以下命令创建 `Pod` 对象:
$ oc apply -f sctp-client.yaml
在服务器上运行 SCTP 监听器。
输入以下命令连接到服务器 Pod:
$ oc rsh sctpserver
输入以下命令启动 SCTP 监听器:
$ nc -l 30102 --sctp
连接到服务器上的 SCTP 监听器。
在新终端窗口或终端程序的标签页中打开。
获取 `sctpservice` 服务的 IP 地址。输入以下命令:
$ oc get services sctpservice -o go-template='{{.spec.clusterIP}}{{"\n"}}'
输入以下命令连接到客户端 Pod:
$ oc rsh sctpclient
输入以下命令启动 SCTP 客户端。将 `<cluster_IP>` 替换为 `sctpservice` 服务的集群 IP 地址。
# nc <cluster_IP> 30102 --sctp