第 14 章 使用调优插件配置系统控制和接口属性
在 Linux 中,管理员可通过 sysctl 在运行时修改内核参数。您可以使用调优 Container Network Interface(CNI)元插件修改接口级网络 sysctl。tuning CNI meta 插件在一个链中运行,主 CNI 插件如下所示。
主 CNI 插件分配接口,并将此接口在运行时传递给 tuning CNI meta 插件。您可以使用 tuning CNI meta 插件更改网络命名空间中的一些 sysctl 和几个接口属性,如 promiscuous 模式、all-multicast 模式、MTU 和 MAC 地址。
14.1. 使用 tuning CNI 配置系统控制
以下流程将调整 CNI 配置为更改接口级网络 net.ipv4.conf.IFNAME.accept_redirects
sysctl。这个示例启用接受和发送 ICMP 重定向的数据包。在 tuning CNI meta 插件配置中,接口名称由 IFNAME
令牌表示,并替换为运行时接口的实际名称。
流程
使用以下内容创建网络附加定义,如
tuning-example.yaml
:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <name> 1 namespace: default 2 spec: config: '{ "cniVersion": "0.4.0", 3 "name": "<name>", 4 "plugins": [{ "type": "<main_CNI_plugin>" 5 }, { "type": "tuning", 6 "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" 7 } } ] }
下面显示了一个 YAML 文件示例:
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: tuningnad namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "tuningnad", "plugins": [{ "type": "bridge" }, { "type": "tuning", "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" } } ] }'
运行以下命令来应用 YAML:
$ oc apply -f tuning-example.yaml
输出示例
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created
使用类似以下示例的网络附加定义,创建示例
pod.yaml
:apiVersion: v1 kind: Pod metadata: name: tunepod namespace: default annotations: k8s.v1.cni.cncf.io/networks: tuningnad 1 spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 2 runAsGroup: 3000 3 allowPrivilegeEscalation: false 4 capabilities: 5 drop: ["ALL"] securityContext: runAsNonRoot: true 6 seccompProfile: 7 type: RuntimeDefault
- 1
- 指定配置的
NetworkAttachmentDefinition
的名称。 - 2
runAsUser
控制使用哪个用户 ID 运行容器。- 3
runAsGroup
控制容器使用哪个主要组 ID。- 4
allowPrivilegeEscalation
决定 pod 是否请求允许特权升级。如果未指定,则默认为 true。这个布尔值直接控制在容器进程中是否设置了no_new_privs
标志。- 5
capabilities
允许特权操作,而不提供完整的 root 访问权限。此策略可确保从 pod 中丢弃了所有功能。- 6
runAsNonRoot: true
要求容器使用 0 以外的任何 UID 运行。- 7
RuntimeDefault
为 pod 或容器工作负载启用默认的 seccomp 配置集。
运行以下命令来应用 yaml:
$ oc apply -f examplepod.yaml
运行以下命令验证 pod 是否已创建:
$ oc get pod
输出示例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
运行以下命令登录到 pod:
$ oc rsh tunepod
验证配置的 sysctl 标记的值。例如,通过运行以下命令查找
net.ipv4.conf.net1.accept_redirects
的值:sh-4.4# sysctl net.ipv4.conf.net1.accept_redirects
预期输出
net.ipv4.conf.net1.accept_redirects = 1