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 ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์—์„œ 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
...

๋‹ค์Œ ๋‚ด์šฉ

์ตœ์ข… ์ˆ˜์ • May 21, 2023 at 2:38 PM PST: [ko] Update outdated files in dev-1.26.-ko.1 [M28-33] (c1cd13e008)