λͺ©μ°¨
Β Traffic
Β Ingress & Egress
νΈλν½μ λ κ°μ§ μ νμ νΈλν½μ΄ μ‘΄μ¬νλ©°, μ΄λ Ingressμ Egressμ΄λ€. Ingressλ λ€μ΄μ€λ νΈλν½μ μλ―Ένλ©°, Egressλ λκ°λ νΈλν½μ μλ―Ένλ€. νΈλν½μ μ μν λλ νΈλν½μ λ°©ν₯μ΄ μ€μνλ€.
νλ‘ νΈ μλμ μΉ μλ², λ°±μλ APIλ₯Ό μλΉμ€νλ μ± μλ², λ°μ΄ν°λ² μ΄μ€ μλ²κ° μμ λμ νΈλν½μ λνλΈλ€λ©΄ λ€μκ³Ό κ°λ€:
Ingress | Egress | |
Web Server | Client β WS | WS β WAS |
Application Server | WS β WAS | WAS β DB |
Database Server | WAS β DB | - |
Β Rule
μ νμ κ°μ΄ νΈλν½μ μμ²(Request) λ°©ν₯μ λ°λΌ Ingress, Egressλ₯Ό ꡬλΆνλ©° μλ΅(Response) λ°©ν₯μ λν΄μλ μ κ²½μ°μ§ μλλ€. μ΄λ¬ν νΈλν½μ μ‘μμ νκΈ° μν΄μλ κ°κ°μ νΈλν½μ λν ν¬νΈ κ΄λ ¨ κ·μΉμ΄ νμνλ€. WSλ HTTP νΈλν½μ λ°μλ€μ΄κΈ° μν΄ 80λ² ν¬νΈμ λν Ingress κ·μΉμ΄ νμνλ©°, WASλ‘ νΈλν½μ λ΄λ³΄λ΄κΈ° μν΄ 5000λ² ν¬νΈμ λν Egress ν¬νΈ κ·μΉμ΄ νμνλ€. λ€λ₯Έ μλ²λ€λ λΉμ·νκ² κ°μμ ν¬νΈ κ·μΉμ μ€μ ν΄μΌ μ μμ μΈ νΈλν½ νλ¦μ μ μ§ν μ μλ€.
Β Network Policy
Β Network Security
μΏ λ²λ€ν°μ€ ν΄λ¬μ€ν°μμ λ
Έλλ λ
Έλλ§λ€ IP μ£Όμκ° μκ³ , κ° νλ(Pod)μ μλΉμ€(Service)λ IP μ£Όμλ₯Ό κ°μ§λ€. μΏ λ²λ€ν°μ€ λ€νΈμνΉμ μ μ 쑰건 μ€ νλλ μ΄λ€ μ루μ
μ ꡬννλ λΌμ°νΈ κ°μ μΆκ° μ€μ μμ΄λ νλκ° μλ‘ ν΅μ ν μ μμ΄μΌ νλ€λ κ²μ΄λ€. μΏ λ²λ€ν°μ€λ κΈ°λ³Έμ μΌλ‘ λͺ¨λ νλκ° ν΄λ¬μ€ν° λ΄μ λ€λ₯Έ νλλ μλΉμ€μμ νΈλν½μ νμ©νλ βAll Allowβ κ·μΉμΌλ‘ ꡬμ±λμ΄μλ€.
Β Network Policy
λ€νΈμν¬ μ μ±
μ μΏ λ²λ€ν°μ€ λ€μμ€νμ΄μ€μ μλ κ°μ²΄(Object)μ΄λ€. λ€νΈμν¬ μ μ±
μ νλ μ΄μμ νλμ μ°κ²°λλ©°, μ μ±
λ΄μμ κ·μΉμ μ μν μ μλ€.
μμμ μμλ‘ λ 3ν°μ΄ μΉ μλ²λ₯Ό κ³μ μκΈ°νμλ©΄ κ° μλ²λ νλμ μλΉμ€λ‘ λ°°ν¬λλ€. νλλ κΈ°λ³Έμ μΌλ‘ λ€λ₯Έ λͺ¨λ νλμ ν΅μ ν μ μκΈ° λλ¬Έμ, WSμ DBκ° μ§μ μ μΌλ‘ ν΅μ νκ³ μλ μνμ΄λ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ€νΈμν¬ μ μ±
μ μ¬μ©νλ€. API Podμμ ν¬νΈ 3306μ λν μΈκ·Έλ μ€ νΈλν½λ§ νμ©νλ κ·μΉμ κ°μ§ μ μ±
μ DB Podκ° κ°μ§μΌλ‘μ¨ Web Podμμ ν΅μ μ λ§μ μ μλ€.
Β Ingress
Β Link Policy - podSelector
μ μ±
μ νλμ μ°κ²°νκΈ° μν΄μλ λΌλ²¨(Label)κ³Ό μ
λ ν°(Selector)λ₯Ό μ¬μ©νλ€. νλμ μ μνμΌμλ labels.role μ ν΅ν΄ λΌλ²¨μ μμ±νλ©°, μ μ±
μ μ μνμΌμλ podSelector.matchLabels.roleμ ν΅ν΄ ν΄λΉ λΌλ²¨κ³Ό μ°κ²°νλ€.
Ingress νΈλν½μ λν νμ©μ΄ μ΄λ€μ§ κ²½μ° νΈλν½μ λν μλ΅(Response)λ μλμΌλ‘ νμ©λκΈ° λλ¬Έμ λ°λ‘ μ€μ ν νμκ° μλ€.
# db-pod.yaml
...
metadata:
name: db
labels:
role: db
...
YAML
볡μ¬
# policy-definition.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from: # Ingress νΈλν½μ μΆμ² μ μ
- podSelector:
matchLabels:
name: api-pod
ports: # Ingress νΈλν½μ νμ© ν¬νΈ μ μ
- protocol: TCP
port: 3306
YAML
볡μ¬
ν΄λΉ μ μ±
μ μ νμΌμλ μΈκ·Έλ μ€μ λν κ·μΉλ§ μ‘΄μ¬νλ€. μ΄λ μΈκ·Έλ μ€ νΈλν½λ§ 격리λλ©°, μ΄κ·Έλ μ€ νΈλν½μ μν₯μ΄ μλ€λ κ²μ λνλΈλ€. λ°λΌμ API Podλ DB Podμ API νΈμΆμ ν μ μμ§λ§, κ·Έ λ°λμΈ DB Podλ API Podμ API νΈμΆμ ν μ μλ€.
Β Link Policy II - namespaceSelector
λΌλ²¨ μ΄λ¦μ κ°μ§λ§ λ€μμ€νμ΄μ€κ° λ€λ₯Ό κ²½μ°μλ namespaceSelector λ₯Ό μΆκ°νμ¬ μ§μ λ λ€μμ€νμ΄μ€μ νλμ λν΄μλ§ νΈλν½μ νμ©ν μ μλ€. namespaceSelector λ§ μ‘΄μ¬νκ³ , podSelector κ° μλ κ²½μ°λ μ‘΄μ¬ν μ μλλ°, μ΄λλ κ°μ λ€μμ€νμ΄μ€μ λͺ¨λ νλμ νΈλν½μ νμ©νλ€.
# policy-definition.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from: # Ingress νΈλν½μ μΆμ² μ μ
- podSelector: # Ingress νΈλν½μ νμ©ν pod μ μ
matchLabels:
name: api-pod
namespaceSelector: # Ingress νΈλν½μ νμ©ν namespace μ μ
matchLabels:
name: prod
ports: # Ingress νΈλν½μ νμ© ν¬νΈ μ μ
- protocol: TCP
port: 3306
YAML
볡μ¬
Β Link Policy III - ipBlock
λ°±μ
μλ²κ° μμ λλ μ΄λ»κ² μ€μ ν΄μΌ ν κΉ? λ°±μ
μλ²λ ν΄λ¬μ€ν°μ λ°°ν¬λμ§ μμ μνμ΄κΈ° λλ¬Έμ podSelectorμ namespaceSelector λ μλνμ§ μλλ€. μ΄λ λ°±μ
μλ²μ λν IP μ£Όμλ₯Ό μκ³ μλ€λ©΄ λ€νΈμν¬ μ μ±
μ μμ±ν μ μλ€. λ€νΈμν¬ μ μ±
μλ ipBlockμ΄ μμ΄ νΉμ ipμμμ νΈλν½μ νμ©ν μ μλ€.
# policy-definition.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from: # Ingress νΈλν½μ μΆμ² μ μ
- podSelector: # Ingress νΈλν½μ νμ©ν pod μ μ
matchLabels:
name: api-pod
namespaceSelector: # Ingress νΈλν½μ νμ©ν namespace μ μ
matchLabels:
name: prod
- ipBlock: # Ingress νΈλν½μ νμ©ν IP μ£Όμ μ μ
cidr: 192.168.5.10/32
ports: # Ingress νΈλν½μ νμ© ν¬νΈ μ μ
- protocol: TCP
port: 3306
YAML
볡μ¬
Β Separate Selectors
spec.ingress.from μλ 3κ°μ μ
λ ν°λ₯Ό μ΄ν΄λ³΄μλ€. μ΄λ μμ -κ° λΆμ΄μλ μ
λ ν°κ° μκ³ , μλ μ
λ ν°κ° μλ€. μ΄λ μ
λ ν°λ₯Ό λΆλ¦¬νκΈ° μν΄ μ¬μ©λλ κ²μ΄λ€. κ°μ - λ΄μ μλ μ
λ ν°λ AND μ°μ°μμ²λΌ μλν΄ ν΄λΉ μ
λ ν°λ€μ λͺ¨λ ν΅κ³Όν΄μΌ ingress νΈλν½μ νμ©νκ² λ€λ κ²μ΄λ€. λ€λ₯Έ -λ₯Ό κ°μ§ μ
λ ν°λ OR μ°μ°μλ‘ μλνμ¬ νλλ§ ν΅κ³Όνλ©΄ ν΄λΉ κ·μΉμ ingress νΈλν½μ νμ©νκ² λ€λ κ²μ΄λ€.
λ°λ‘ μ μμ μ½λμμλ podSelectorμ namespaceSelectorκ° λ¬Άμ¬μμΌλ©°, ipBlockκ³Όλ λΆλ¦¬λμ΄ μλ€. λ°λΌμ ingress νΈλν½μ νμ©νκΈ° μν΄μλ podSelector AND namespaceSelectorλ₯Ό ν΅κ³Όνκ±°λ OR ipBlockμ ν΅κ³Όνλ©΄ λλ€.
podSelectorμ namespaceSelectorλ₯Ό λΆλ¦¬νμ¬ μΈ μ
λ ν° μ€ νλλ§ ν΅κ³Όν΄λ λλλ‘ νλ €λ©΄ namespaceSelector μμ - λ₯Ό λΆμ΄λ κ²μΌλ‘ ν΄κ²°ν μ μλ€.
Β Egress
Egressλ Ingressμ λ¬λ¦¬ fromμ΄ μλ toλ₯Ό κ°λλ€. μ΄λ₯Ό ν΅ν΄ μΈλΆλ‘ λκ°λ νΈλν½μ νμ©νλ κ·μΉμ μ€μ ν μ μλ€.
λ°±μ
μλ²κ° μ κ·Όνλ κ²μ΄ μλ λ€λ₯Έ μν©μ κ°μ ν΄λ³΄μ. DB Podμμ μ€νλλ μμ΄μ νΈκ° λ°±μ
μλ²λ‘ λ°±μ
μ νΈμνλ€κ³ νλ€λ©΄, νΈλν½μ DB Podμμ μΈλΆ λ°±μ
μλ²λ‘ λ°μνκ² λλ€. μ΄λ μΈλΆ λ°±μ
μλ²λ‘μ Egress νΈλν½μ νμ©νλ κ·μΉμ μ€μ ν΄μΌ νλ€
# policy-definition.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress # Egress μΆκ°
ingress:
- from:
- podSelector:
matchLabels:
name: api-pod
ports:
- protocol: TCP
port: 3306
egress: # Egress νΈλν½μ λμ°©μ μ μ
- to:
- ipBlock:
cidr: 192.168.5.10/32
ports:
- protocol: TCP
port: 80
YAML
볡μ¬
Β Note
μ°Έκ³ ν μ μΌλ‘, λͺ¨λ λ€νΈμν¬ μ루μ
μ΄ λ€νΈμν¬ μ μ±
μ μ§μνλ κ²μ μλλ€. λ€νΈμν¬ μ μ±
μ΄ μ§μλλ μ루μ
μΌλ‘λ Cube Router, Calico, Romana, WaveNet κ° μλ€. λ€νΈμν¬ μ μ±
μ μ§μνμ§ μλ μ루μ
μΌλ‘λ Flannelμ΄ μλ€.
νμ§λ§ λ€νΈμν¬ μ μ±
μ μ§μνμ§ μλλ€κ³ μ€λ₯κ° μκΈ°μ§λ μλλ€. λ€νΈμν¬ μ μ±
μ μ§μνμ§ μλλΌλ μμ±ν μλ μμ§λ§ μ μ±
μ μ μ©λμ§ μμΌλ©°, μ€λ₯ λ©μμ§κ° νμλμ§ μλλ€.
γ
γ
γ
γ΄γ
γΉ
γ
γ
γ΄γΉ | γ
γ΄γ
γΉ | γ
γ
γ΄γΉγ·γΉ |
γ·γΉγ· |