Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Network Plugins
๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ
์ฟ ๋ฒ๋คํฐ์ค 1.34 ๋ฒ์ ์ ํด๋ฌ์คํฐ ๋คํธ์ํน์ ์ํด ์ปจํ ์ด๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค(CNI) ํ๋ฌ๊ทธ์ธ์ ์ง์ํ๋ค. ์ฌ์ฉ ์ค์ธ ํด๋ฌ์คํฐ์ ํธํ๋๋ฉฐ ์ฌ์ฉ์์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ CNI ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ผ ํ๋ค. ๋ ๋์ ์ฟ ๋ฒ๋คํฐ์ค ์ํ๊ณ์ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ด (์คํ์์ค์ ํด๋ก์ฆ๋ ์์ค๋ก) ์กด์ฌํ๋ค.
CNI ํ๋ฌ๊ทธ์ธ์ ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํฌ ๋ชจ๋ธ์ ๊ตฌํํด์ผ ํ๋ค.
v0.4.0 ์ด์์ CNI ์คํ๊ณผ ํธํ๋๋ CNI ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํ๋ฌ๊ทธ์ธ์ CNI ์คํ v1.0.0๊ณผ ํธํ๋๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ์ ๊ถ์ฅํ๋ค(ํ๋ฌ๊ทธ์ธ์ ์ฌ๋ฌ ์คํ ๋ฒ์ ๊ณผ ํธํ ๊ฐ๋ฅ).
์ค์น
๋คํธ์ํน ์ปจํ ์คํธ์์ ์ปจํ ์ด๋ ๋ฐํ์์ kubelet์ ์ํ CRI ์๋น์ค๋ฅผ ์ ๊ณตํ๋๋ก ๊ตฌ์ฑ๋ ๋ ธ๋์ ๋ฐ๋ชฌ์ด๋ค. ํนํ, ์ปจํ ์ด๋ ๋ฐํ์์ ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํฌ ๋ชจ๋ธ์ ๊ตฌํํ๋ ๋ฐ ํ์ํ CNI ํ๋ฌ๊ทธ์ธ์ ๋ก๋ํ๋๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
์ฐธ๊ณ :
์ฟ ๋ฒ๋คํฐ์ค 1.24 ์ด์ ๊น์ง๋ cni-bin-dir
๊ณผ network-plugin
์ปค๋งจ๋ ๋ผ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด kubelet์ด CNI ํ๋ฌ๊ทธ์ธ์ ๊ด๋ฆฌํ๊ฒ ํ ์๋ ์์๋ค.
์ด ์ปค๋งจ๋ ๋ผ์ธ ํ๋ผ๋ฏธํฐ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค 1.24์์ ์ ๊ฑฐ๋์์ผ๋ฉฐ, CNI ๊ด๋ฆฌ๋ ๋ ์ด์ kubelet ๋ฒ์์ ํฌํจ๋์ง ์๋๋ค.
๋์ปค์ฌ ์ ๊ฑฐ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ CNI ํ๋ฌ๊ทธ์ธ ๊ด๋ จ ์ค๋ฅ ๋ฌธ์ ํด๊ฒฐ์ ์ฐธ์กฐํ์.
์ปจํ ์ด๋ ๋ฐํ์์์ CNI ํ๋ฌ๊ทธ์ธ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ดํ ์์ธํ ๋ด์ฉ์ ์๋ ์์์ ๊ฐ์ ์ปจํ ์ด๋ ๋ฐํ์์ ๋ํ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์.
CNI ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ดํ ์์ธํ ๋ด์ฉ์ ํด๋น ํ๋ฌ๊ทธ์ธ ๋๋ ๋คํธ์ํน ํ๋ก๋ฐ์ด๋ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์.
๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ ์๊ตฌ ์ฌํญ
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋น๋ํ๊ฑฐ๋ ๋ฐฐํฌํ๋ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ์์ ์ฌ์ฉ์๋ค์ ์ํด, ํ๋ฌ๊ทธ์ธ์ kube-proxy๋ฅผ ์ง์ํ๊ธฐ ์ํ ํน์ ์ค์ ์ด ํ์ํ ์๋ ์๋ค.
iptables ํ๋ก์๋ iptables์ ์์กดํ๋ฉฐ, ํ๋ฌ๊ทธ์ธ์ ์ปจํ
์ด๋ ํธ๋ํฝ์ด iptables์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, ํ๋ฌ๊ทธ์ธ์ด ์ปจํ
์ด๋๋ฅผ ๋ฆฌ๋
์ค ๋ธ๋ฆฟ์ง์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ, ํ๋ฌ๊ทธ์ธ์ net/bridge/bridge-nf-call-iptables
sysctl์
1
๋ก ์ค์ ํ์ฌ iptables ํ๋ก์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํด์ผ ํ๋ค.
ํ๋ฌ๊ทธ์ธ์ด Linux ๋ธ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋์ Open vSwitch๋ ๋ค๋ฅธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ปจํ
์ด๋ ํธ๋ํฝ์ด ํ๋ก์์ ๋ํด ์ ์ ํ๊ฒ ๋ผ์ฐํ
๋๋๋ก ํด์ผ ํ๋ค.
kubelet ๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก noop
ํ๋ฌ๊ทธ์ธ์ด ์ฌ์ฉ๋๋ฉฐ,
net/bridge/bridge-nf-call-iptables=1
์ ์ค์ ํ์ฌ ๊ฐ๋จํ ๊ตฌ์ฑ(๋ธ๋ฆฟ์ง๊ฐ ์๋ ๋์ปค ๋ฑ)์ด iptables ํ๋ก์์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋๋ก ํ๋ค.
๋ฃจํ๋ฐฑ CNI
์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํฌ ๋ชจ๋ธ์ ๊ตฌํํ๊ธฐ ์ํด ๋
ธ๋์ ์ค์น๋ CNI ํ๋ฌ๊ทธ์ธ ์ธ์๋, ์ฟ ๋ฒ๋คํฐ์ค๋ ๊ฐ ์๋๋ฐ์ค(ํ๋ ์๋๋ฐ์ค, VM ์๋๋ฐ์ค ๋ฑ)์
์ฌ์ฉ๋๋ ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค lo
๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ์ปจํ
์ด๋ ๋ฐํ์๋ ์๊ตฌํ๋ค.
๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค ๊ตฌํ์ CNI ๋ฃจํ๋ฐฑ ํ๋ฌ๊ทธ์ธ์
์ฌ์ฌ์ฉํ๊ฑฐ๋ ์์ฒด ์ฝ๋๋ฅผ ๊ฐ๋ฐํ์ฌ ์ํํ ์ ์๋ค. (CRI-O ์์ ์ฐธ์กฐ)
hostPort ์ง์
CNI ๋คํธ์ํน ํ๋ฌ๊ทธ์ธ์ hostPort
๋ฅผ ์ง์ํ๋ค. CNI ํ๋ฌ๊ทธ์ธ ํ์ด ์ ๊ณตํ๋ ๊ณต์
ํฌํธ๋งต(portmap)
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๊ฑฐ๋ portMapping ๊ธฐ๋ฅ์ด ์๋ ์์ฒด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ ์๋ค.
hostPort
์ง์์ ์ฌ์ฉํ๋ ค๋ฉด, cni-conf-dir
์ portMappings capability
๋ฅผ ์ง์ ํด์ผ ํ๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
{
"name": "k8s-pod-network",
"cniVersion": "0.4.0",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "127.0.0.1",
"ipam": {
"type": "host-local",
"subnet": "usePodCidr"
},
"policy": {
"type": "k8s"
},
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
ํธ๋ํฝ ์ ฐ์ดํ(shaping) ์ง์
์คํ์ ์ธ ๊ธฐ๋ฅ์ ๋๋ค
CNI ๋คํธ์ํน ํ๋ฌ๊ทธ์ธ์ ํ๋ ์์ ๋ฐ ์ก์ ํธ๋ํฝ ์ ฐ์ดํ๋ ์ง์ํ๋ค. CNI ํ๋ฌ๊ทธ์ธ ํ์์ ์ ๊ณตํ๋ ๊ณต์ ๋์ญํญ(bandwidth) ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๊ฑฐ๋ ๋์ญํญ ์ ์ด ๊ธฐ๋ฅ์ด ์๋ ์์ฒด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ ์๋ค.
ํธ๋ํฝ ์
ฐ์ดํ ์ง์์ ํ์ฑํํ๋ ค๋ฉด, CNI ๊ตฌ์ฑ ํ์ผ (๊ธฐ๋ณธ๊ฐ /etc/cni/net.d
)์ bandwidth
ํ๋ฌ๊ทธ์ธ์
์ถ๊ฐํ๊ณ , ๋ฐ์ด๋๋ฆฌ๊ฐ CNI ์คํ ํ์ผ ๋๋ ํฐ๋ฆฌ(๊ธฐ๋ณธ๊ฐ: /opt/cni/bin
)์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค.
{
"name": "k8s-pod-network",
"cniVersion": "0.4.0",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "127.0.0.1",
"ipam": {
"type": "host-local",
"subnet": "usePodCidr"
},
"policy": {
"type": "k8s"
},
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
}
},
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
}
]
}
์ด์ ํ๋์ kubernetes.io/ingress-bandwidth
์ kubernetes.io/egress-bandwidth
์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ ์ ์๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
kind: Pod
metadata:
annotations:
kubernetes.io/ingress-bandwidth: 1M
kubernetes.io/egress-bandwidth: 1M
...