ããã«ã¡ã¯ïŒKubernetesç°å¢ã§ã®ãããã¯ãŒã¯ã»ãã¥ãªãã£ã«ã€ããŠæ©ãã§ããŸãããïŒð€ å€ãã®çãããeBPFããŒã¹ã®åŒ·åãªãããã¯ãŒãã³ã°/ã»ãã¥ãªãã£ãœãªã¥ãŒã·ã§ã³ã§ããCiliumã䜿çšããŠããããšã§ããããCiliumNetworkPolicyãäžçæžåœäœæããŠé©çšããã®ã«ããããïŒãªãããªã·ãŒãé©çšãããªããã ããïŒããšããäœãããŠããªãã®ã«ããªãéä¿¡ããã¹ãŠãããã¯ããããã ããïŒããšãã£ãçµéšã¯ãããŸãããïŒ
仿¥ã¯ãå€ãã®äººãèŠèœãšããã¡ã§ãããã¯ã©ã¹ã¿ãŒå šäœã®ã»ãã¥ãªãã£ã¬ãã«ã決å®ããéåžžã«éèŠãªèšå®ãCiliumã®ããªã·ãŒé©çšã¢ãŒã(Policy Enforcement Mode)ã«ã€ããŠæ·±ãæãäžããŠãããŸãããã®èšå®äžã€ã§ãããªãã®ã¯ã©ã¹ã¿ãŒã¯éå£ã®èŠå¡ã«ããéãæŸããã倧éã«ããªãåŸãŸãïŒðª

ð å šäœåïŒã»ãã¥ãªãã£ã®åºçºç¹ã決ãããã¹ã¿ãŒã¹ã€ãã
Ciliumã®ããªã·ãŒé©çšã¢ãŒãã¯ãã¯ã©ã¹ã¿ãŒå šäœã«é©çšãããã°ããŒãã«èšå®ã§ãããŸãã§å»ºç©ã®ãã¹ãŠã®ãã¢ã«å¯Ÿããåºæ¬ã«ãŒã«ã決ãããããªãã®ã§ããããã¹ãŠã®ãã¢ãã²ãšãŸãããã¯ãããïŒ(Default Deny)ããããšãããã¹ãŠã®ãã¢ãã²ãšãŸãéããŠãããïŒ(Default Allow)ããæ±ºå®ãããã¹ã¿ãŒã¹ã€ãããšèšããã§ãããã
ãã®ã¢ãŒãã¯å€§ãã3ã€ã«åãããããããã®åäœæ¹åŒãšã»ãã¥ãªãã£ã¬ãã«ã¯å šãç°ãªããŸããããããäžã€ãã€èŠãŠãããŸãããã
1. alwaysã¢ãŒã: ð° éå£ã®é²åŸ¡ïŒãŒããã©ã¹ãã®å§ãŸã
æã匷åã§å®å šãªã¢ãŒãã§ããååã®éããåžžã«ããªã·ãŒãé©çšããŸãã
- åäœæ¹åŒ: ã¯ã©ã¹ã¿ãŒå ã®ãã¹ãŠã®Podã«å¯ŸããŠãããã©ã«ãã§ããã¹ãŠã®éä¿¡ã鮿 (Default Deny)ãããªã·ãŒãé©çšããŸããã€ãŸããCiliumNetworkPolicyãéããŠæç€ºçã«èš±å¯ãããŠããªããã¹ãŠã®ãã©ãã£ãã¯ã¯ã容赊ãªã鮿ãããŸãã
- æ¯å©: ãã¹ãŠã®ãã¢ãåºãããã¯ãããæå 端ã®ã»ãã¥ãªãã£ãã«ã§ããåºãéãããããã¢ãéããã«ã¯ã誰ãã©ã®ãã¢ããå ¥ãããšãã§ããããæç€ºããå ¥é€šèšŒ(ããªã·ãŒ)ãå¿ ãå¿ èŠã§ãã
- ãã€äœ¿ããïŒ:
- ã»ãã¥ãªãã£ãéåžžã«éèŠãªãããã¯ã·ã§ã³ç°å¢
- æåãããŒããã©ã¹ã(Zero Trust)ãããã¯ãŒã¯ã¢ãã«ãå®è£ ãããå Žå
- 誀æäœã«ããã»ãã¥ãªãã£ã®è匱æ§ãæ ¹æ¬ãã鮿ãããå Žå
泚æïŒ â ïž ãã®ã¢ãŒããçªç¶éçšç°å¢ã«é©çšãããšãæç€ºçã«èš±å¯ãããããªã·ãŒããªããã¹ãŠã®ãµãŒãã¹éã®éä¿¡ãå³åº§ã«äžæãããå¯èœæ§ããããŸããååãªãã¹ããšããªã·ãŒã®æºåãå¿ é ã§ãïŒ
2. neverã¢ãŒã: ð€ èªç±ãªç¡æ³å°åž¯ïŒå®ã¯ãã¹ãŠèšç»éãïŒ
ååã®éããããªã·ãŒé©çšãå šãè¡ããªãã¢ãŒãã§ãã
- åäœæ¹åŒ: CiliumNetworkPolicyãªãœãŒã¹ãäœæããŠããCiliumã¯ãããå®å šã«ç¡èŠããŸãããã¹ãŠã®Podã¯äºãã«èªç±ã«éä¿¡ã§ããŸããCiliumã¯çŽç²ã«CNI(ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹)ãšãµãŒãã¹ã¡ãã·ã¥ãããŒããã©ã³ã·ã³ã°æ©èœã®ã¿ãå®è¡ããŸãã
- æ¯å©: å£ããã¢ãå šããªã巚倧ãªãªãŒãã³ã¹ããŒã¹ãªãã£ã¹ã§ãã誰ããã©ããžã§ãèªç±ã«ç§»åã§ããŸãã
- ãã€äœ¿ããïŒ:
- Ciliumã®åŒ·åãªãããã¯ãŒã¯ããªã·ãŒæ©èœããããeBPFããŒã¹ã®é«æ§èœãããã¯ãŒãã³ã°ãå¯èŠ³æž¬æ§(Observability)æ©èœã«éäžãããå Žå
- ãããã¯ãŒã¯ããªã·ãŒãä»ã®ã»ãã¥ãªãã£ãœãªã¥ãŒã·ã§ã³(äŸ: Istio)ã§äžå€®ç®¡çããŠããå Žå
- ããªã·ãŒé©çšã«ããåé¡ãäžæçã«è§£æ±ºããåå ãç¹å®ããå¿ èŠããããããã°ç¶æ³
ãã®ã¢ãŒãã¯ãã»ãã¥ãªãã£ãæŸæ£ããããšããæå³ã§ã¯ãããŸãããããªã·ãŒé©çšã®è²¬ä»»ãä»ã®å Žæã«å§ä»»ããããç¹å®ã®ç®çã®ããã«æå³çã«ç¡å¹åãããããæŠç¥çãªéžæã§ããå ŽåããããŸãã
3. defaultã¢ãŒã: ð€ æ¡ä»¶ä»ãé©çšã段éçã»ãã¥ãªãã£åŒ·åã®éµ
æãæ··ä¹±ãããããããããŸããããæãæè»ãªã¢ãŒãã§ããCiliumãã€ã³ã¹ããŒã«ããéã®ããã©ã«ãå€ã§ããããŸãã
- åäœæ¹åŒ: ãã®ã¢ãŒãã¯æ¡ä»¶ä»ãã§åäœããŸãã
- ã©ã®CiliumNetworkPolicyã®å¯Ÿè±¡(Selector)ã«ãéžæãããŠããªãPodã¯ããã¹ãŠã®ãã©ãã£ãã¯ãèš±å¯ããŸã (Default Allow)ã
- 1ã€ä»¥äžã®CiliumNetworkPolicyã«ãã£ãŠéžæãããPodã¯ããã®ç¬éããããã©ã«ãã§ãã¹ãŠã®ãã©ãã£ãã¯ã鮿(Default Deny)ãããåœè©²ããªã·ãŒã«æç€ºãããã«ãŒã«ã«åŸã£ãŠã®ã¿éä¿¡ãèš±å¯ãããŸãã
- æ¯å©: æ®æ®µã¯ãã¹ãŠã®ãã¢ãéããŠããäžè¬çãªãã«ã§ããããããç¹å®ã®ãªãã£ã¹ãã¢ã®åã«ãã»ãã¥ãªãã£åºåããšããçæ¿(ããªã·ãŒ)ã貌ã£ãç¬éããã®ãªãã£ã¹ã¯èš±å¯ããã人ã ããåºå ¥ãã§ããçµ±å¶åºåã«å€ãããŸããä»ã®ãã¢ã¯äŸç¶ãšããŠéããŠããŸãã
- å ¬åŒåç§°ã§ã¯ãããŸããã…: ãã®ã¢ãŒãã®åäœæ¹åŒãæããã衚ãèšèãããŸãã«Conditional (æ¡ä»¶ä»ã) ã§ããèšå®ãã¡ã€ã«ã«conditionalãšæžãããŠããããã§ã¯ãããŸãããããã®èšèã§èŠããŠãããšçè§£ããããã§ãããã
ã³ãŒãã§çè§£ããdefaultã¢ãŒã
ãã®ã¢ãŒããã©ã®ããã«åäœããããå®éã«ç¢ºèªããŠã¿ãŸããããCiliumã®èšå®ã¯éåžžãcilium-configãšããConfigMapã§ç®¡çãããŸãã
# cilium-config ConfigMapã®äžéš
apiVersion: v1
kind: ConfigMap
metadata:
name: cilium-config
namespace: kube-system
data:
# ãããããªã·ãŒã¢ãŒããèšå®ããå Žæã§ãïŒ
policy-enforcement-mode: "default" # "always", "never" ã«å€æŽå¯èœ
次ã«ãã·ããªãªãéããŠdefaultã¢ãŒãã®åäœãèŠãŠãããŸããããfrontendãbackendãdatabaseã®3ã€ã®Podããããšä»®å®ããŸãã
ç¶æ³1: ããªã·ãŒãäœããªãå Žå
policy-enforcement-modeãdefaultã®ç¶æ ã§ã¯ãCiliumNetworkPolicyãäœããªãããããã¹ãŠã®Podã¯äºãã«èªç±ã«éä¿¡ã§ããŸãã
frontend <---> backend (O)
frontend <---> database (O)
backend <---> database (O)
ç¶æ³2: backendãä¿è·ããããªã·ãŒã远å
次ã«ãbackend Podã«å¯ŸããŠã®ã¿å ¥ã£ãŠãã(ingress)ãã©ãã£ãã¯ãå¶åŸ¡ããããªã·ãŒã远å ããŠã¿ãŸããããfrontend Podããã®ã¢ã¯ã»ã¹ã®ã¿ãèš±å¯ããããªã·ãŒã§ãã
# raw-data: CiliumNetworkPolicyã®äŸ
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: backend-policy
namespace: default
spec:
endpointSelector:
matchLabels:
app: backend # ð¯ ãã®ããªã·ãŒã¯app=backend Podã«ã®ã¿é©çšãããŸãã
ingress:
- fromEndpoints:
- matchLabels:
app: frontend # ð app=frontend Podããã®ã¢ã¯ã»ã¹ã®ã¿èš±å¯
ãã®ããªã·ãŒãé©çšãããç¬éãéæ³ã®ãããªå€åãèµ·ãããŸãïŒâš
- backend Pod: ããªã·ãŒã®endpointSelectorã«éžæãããããããã»ãã¥ãªãã£ã¢ãŒããã«åãæ¿ãããŸããããã§ãapp: frontendã©ãã«ãæã€Podã®ã¿ãbackendã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
- frontendãdatabase Pod: ã©ã®ããªã·ãŒã«ãéžæãããŠããªããããäŸç¶ãšããŠãããã©ã«ãèš±å¯ãç¶æ ãç¶æããŸãã
çµæã¯ä»¥äžã®éãã§ãã
frontend ---> backend (O, ì ì±
ì ìíŽ íì©)
database ---> backend (X, ì ì±
ì ìíŽ ì°šëš)
# frontendãšdatabaseã¯ããªã·ãŒã®å¯Ÿè±¡ã§ã¯ãªããããäºãã«èªç±ã«éä¿¡å¯èœ
frontend <---> database (O)
ãã®ããã«ãdefaultã¢ãŒãã¯ã¯ã©ã¹ã¿ãŒå šäœã®éä¿¡ãäžæãããããšãªããéèŠãªã¢ããªã±ãŒã·ã§ã³ããæ®µéçã«ã»ãã¥ãªãã£ã匷åããŠããããšãã§ãããéåžžã«å®çšçãªæ¹æ³ã§ãã
ð§ äžç®ã§æ¯èŒããæ£ããéžæããã
| ã¢ãŒã | åäœæ¹åŒ | ã»ãã¥ãªãã£ã¬ãã« | æšå¥šããã䜿çšäŸ |
|---|---|---|---|
| always | ãã¹ãŠã®Podãããã©ã«ãã§é®æ (Default Deny) | ð æäž | ãããã¯ã·ã§ã³ããŒããã©ã¹ãç°å¢ |
| default | ããªã·ãŒã«éžæãããPodã®ã¿ããã©ã«ãã§é®æ (Conditional Deny) | â ïž äž | 段éçãªã»ãã¥ãªãã£å°å ¥ãéçº/ã¹ããŒãžã³ã°ç°å¢ |
| never | ãã¹ãŠã®ããªã·ãŒãç¡èŠããã¹ãŠã®ãã©ãã£ãã¯ãèš±å¯ (Always Allow) | ð ãªã | ãããã°ãããªã·ãŒãä»ã®ããŒã«ã§ç®¡çããå Žå |
çµè«ïŒããªãã®ã¯ã©ã¹ã¿ãŒã«åã£ãæãçããŸããã
Ciliumã®ããªã·ãŒé©çšã¢ãŒãã¯ãåãªãèšå®å€äžã€ã§ã¯ãªããã¯ã©ã¹ã¿ãŒå šäœã®ã»ãã¥ãªãã£å²åŠã決å®ããéèŠãªéžæã§ãã
- æé«ã¬ãã«ã®ã»ãã¥ãªãã£ãæããªãalways
- 段éçã«ã»ãã¥ãªãã£ãå°å ¥ããããªãdefault
- ç¹å¥ãªç®ç(ãããã°ãªã©)ããããªãnever
ä»ããããªãã®ã¯ã©ã¹ã¿ãŒèšå®ã確èªããŠã¿ãŠãã ãããæãããŠã©ã®ã¢ãŒãã§éçšãããŠããŸããïŒãã®èšäºããããªãã®Kubernetesç°å¢ã«æãé©ããã»ãã¥ãªãã£æŠç¥ãç«ãŠãã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãïŒðª
ã³ã¡ã³ããæ®ã