á¨á˝áá á áá á ááŁá˘á á Kubernetes ááľáĽ áŤááľá á¨ááľááá ááá˛áá˝ áĽá á¨ááľááá ááá˛áá˝á áĽáá˛áá á¨áśáľá°á ááá Calico áááá áá°á á á á
áá á¨ááŤá°ááá áá°á¨áłá áááŽá˝ ááľá°ááá
ááᢠá ááááłá˝á ááᣠá¨áááá áááááľ áĽá á ááłááľ áŁá
áŞáŤáľ á¨á á°áŤá áááłá˝á áĽááá°á ááłááá˝á á áá áá ááłáŤáá˘
á¨áŠá áááľáľ á ááłá¨ áá¨áĽ ááłáŞáŤ ááŁá ááá˘áŤ
á¨áŠá áááľáľ áááľá°á áŤá á ááłá¨ áá¨áĽ ááłá°áĽ á áá˝ááᢠáá°á á˛á á áá á¨áłá¸á áá ááłááśá˝á á áłáľááá-â
á áá
á˝áá á ááľ ááľáĽ K8s á áŤáą á ááŤáŁáá˝ áĽá á á áááá˝ ááŤá¨á á¨á ááłá¨ áá¨áĽ áááááľ á°á áŤá áĽááłááá áἠááŁá á¨áááŁá áá-ááá
á, á¨á°ááŤáŠ. ᨠCNI á°á°áŞáá˝ (á¨ááŤáŁ á ááłá¨áá¨áĽ á áááá˝)ᢠáľááá
á˝áá°-ááłáĽ á¨á áá áĽá
áááłá, á¨áĽááá
á°á°áŞáá˝ ááľáĽ á áŁá á¨á°ááá°á
áĽá á Kubernetes áááľá°á ááľáĽ á¨ááľááá ááᲠá áľá°áłá°áá ááá°áŤááľ "á¨áłáĽá áá" ááá§á
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
áá
á áŁá áĽááłáá ááłá á áá°áá
2 á¨áľáŤáá ááááśá˝ áááŤá¸á ááááŤáłá áá-áá° ááľ (á˘áááŹáľ) áĽá á¨áĽáą áááŁáľ (á˘áá¨áľ)á˘
á áĽáááą ááá˛áŤ á áĽáá
áľáá´ á á
áŁáŤ áá á áááľá¨áľ á áĽááá
2 ááľáŚá˝ áá¨ááá á˘
á¨áááĽáá á áľááá áŁá ᪠ááŤá áá; á°áᥠá¨áááá¨á°á. áá ááľ (ááá á¨áĄáľáá˝ áľáĽáľáĽ) ááá á áŤáŁá˘ (áááľá á¨áľá áŚáł) ááá áá˝áá. á áá ááááᥠáááąá á¨ááá áááŽá˝ ááááśá˝ áá፠ááŤá á ááŁá¸á (ááááľ á áŠá áááľáľ áááśá˝) - áĽááá ááá˛á¨áá˝ á¨áá áŠáľ áĽááá áá¸á.
á á ááľ ááááľ áá፠á¨á°áááą ááąá á¨ááŤáŽá˝ áĽááľ á á°á¨ááŞáŁ áĽáá° âáááá ááá áááľ/áá¨áá¨á/ááá á°áâ áŤá á°ááŚá˝á á á°ááŤáŠ ááŠááśá˝ ááá ááťááᢠááá ááá, á¨á áš áááŁáłáá˝ áĽá á áá áááá:
podSelector: {}
ingress: []
policyTypes:
- Ingress
- á áá ááłá ᣠá á á¨áŁá˘á ááľáĽ áŤá ááá ááśá˝ á¨áᢠáľáŤáá áłáá°ááᢠá°ááŤáá áŁá ᪠á áá¨á°áá áááŁáł áá¨ááá áá˝áá-
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
á á°ááłáłá ááአááááŁáľáĄ-
podSelector: {}
policyTypes:
- Egress
- áááĽááľ. áĽá áá ááŤá°áľ áĽááłáá áľ áĽáááĄ-
podSelector: {}
egress:
- {}
policyTypes:
- Egress
áá° áááľá°á ᨠCNI á°á°áŞ áá፠áľááááľ áŤáá áἠááŁá á¨áááŁá ááłá ááᢠáĽáŤááłááą á¨á ááłá¨ áá¨áĽ áááá á¨ááľááá ááá˛á á áá°áááá˘. áááłá, áá°á á˛á á¨á°á áá°á Flannel á¨á ááłá¨ áá¨áĽ ááá˛áá˝á áĽáá´áľ áááá áĽááłáá áľ á áŤáá
á
ᨠCalico áá áá°ááá : á˛ááŞ
ᨠCalico áááá ᨠFlannel (áááľ ááŽáááľ) áá á ááŁáá áĽá
á áá ááá áá˝ááá˘
ᨠK8s "á¨áŚááľ" áááľá áĽá á¨áŤáᎠá¨á°ááááá á¤áá á á áá áá áá áĽáľáá˝á áá°áŁá?
á NetworkPolicy ááľáĽ áá áĽáá°á°ááᣠáĽáááĄ-
- ááá˛á¨áá˝ á á áŤáŁá˘á á¨á°áá°áĄ áá¸á;
- ááá˛áá˝ á áááŤáá˝ ááááľ á á°á°á¨ááŁá¸á ááľáá˝ áá áá°áá áŤá;
- á°ááŚá˝ á ááłáá˝, á á¨áŁá˘áá˝ ááá áááľ áá¨áŚá˝ áá áá°áá አáá˝áá;
- á°ááŚá˝ ááŽáśáŽáá˝áᣠá¨á°á°á¨á ááá ááłááŤá á¨áá°áĽ ááááŽá˝á ááá áá˝ááá˘
áŤáᎠáĽááá á á°ááŁáŤáľ áĽáá´áľ áĽáá°ááŤá°á áĽáááĄ-
- ááá˛áá˝ á ááááá ááá áá áá°áá አáá˝áá: ááľ, ááŤáŁ, áááŁá áá˝á ááá á áááá˝;
- á°ááŚá˝ á ááľ á¨á°áá°á áĽááá ááá áá˝áá (ááá¨á, áááľ, áááŁáľ);
- áááá ááá á¨ááá˝ ááá áá°áĽáŁ á¨á°ááŤáŠ áá°áŚá˝áŁ ááŽáśáŽáá˝áŁ HTTP ááá ICMP áŁá ááŤáľáŁ á áá ááá áááľ áá¨áĽ (4á ááá 6á áľáááľ)ᣠááááá ááŤáŽá˝ (á áááá˝áŁ á áľá°áááá˝áŁ á áŤáŁá˘áá˝) ááá áá˝ááá˘
- á á°á¨ááŞáᣠá¨DNAT á ááĽáŽá˝á áĽá á¨áľáŤáá ááľá°ááá፠ááá˛áá˝á á áá áá á¨áľáŤáá áááŁáĄá áááŁá á áá˝ááá˘
á¨ááááŞáŤá á GitHub á áŤáᎠáá¨ááť ááľáĽ á ááá 2016 ááááá, áĽá á¨á ááľ á ááľ á áá ááŽáááą Kubernetes á ááłá¨ áá¨áĽ áááááľá á áá°áŤááľ á¨ááľ áááŁá áá°á áŚáł áá°á° - áá
áááłá á áłá°áł áĽááľ áá¤áśá˝ á°á¨ááá§á.
á¨K8s áá áĽá áľáá
á¨áá°áłá°áŠ áááľááá˝áŁáĽáá°
áĽáá° á ááťá¸á, ááá ááá áĽáá
áĽáŠ áá. áááłá¸áá á ááá°á˝ á¨áŤáᎠáááľ áĄáľá á á´áŽááľ 50000 áŽáá´áááŽá˝ á¨ááá á ááĽááľ á¨500 á áá áŽáá´áááŽá˝á á 20 áááŤá ááśá˝ áá á ááŽáĽ á¨áľá ááá á ááťá¸á á áłááˇáᢠá áá á áá ááá á˝ááŽá˝ á áá°ááŠá. áĽáá°áá
áŤá áá¤áśá˝
ááŽáááą á áŁá á ááĽááľ á áá°á áá áá, á K8s, OpenShift, OpenStack á áá°áłá°áŠ áłáá áááľááá˝ ááľáĽ áľáŤá áá°ááá, áááľá°á á˛á áá áŤáᎠáá áá ááťáá.
ᨠCalico áá áááááą
á á á ááá á¨áŤáá áŠá áááľáľ á á ááá CNI á ááŤá áááá ááá áá ááááłá calico.yaml
, kubectl apply -f
.
áĽáá° á°áᥠᣠá¨á áá á¨áááá áľáŞáľ á¨á áἠááááš 2-3 ᨠKubernetes áľáŞáśá˝ áá á°áłáá áá-á á áŽá áľáŞáśá˝ ááľáĽ áŤáá á á áŤá á áá°áá¨á¨á áĽá ááľáľá á¨áááᢠáĽáá° ááá˘ááš á¨áá áŤáᎠá¨3.10 á áá CentOS 7áŁáĄáĄááą 16 ááá á´á˘áŤá 8á á ááŤááą á¨ááááľ á¨áááá˝ áá áá°áŤááŁá á ááá ááá á áááŞá¤áľ ááá˘
á á á¨áŁá˘á ááľáĽ áááá
áá á ááá áááá¤áŁ á áŤáᎠááľáłááť ááľáĽ áŤááľ á¨á ááłá¨ áá¨áĽ ááá˛áá˝ á¨áá°á á á°á¨ááá˝ áĽáá´áľ áĽáá°áááŤáŠ áĽá á°ááŚá˝á á¨ááá á á ááŤá¨áĽ áĽáá´áľ á°ááŁá˘ááłá¸áá áĽá áá á á°áááááłá¸áá áĽáá°ááŤááá ááá¨áłáľ ááá ááłáá áĽáááá¨áľáĄ-
á áááľá°á ááľáĽ 2 áἠá áááŹá˝áá˝ á°áááá°ááᥠá Node.js áĽá PHP ááľáĽ á ááą Redis áá áááᢠá¨Node.js áá áŤááá áááááľ á ááľáá á á¨Redisá ᨠPHP ááłá¨áťá ááááľ á¨áá¨á°ááá áááŞáŤ áá°ááĽáŠá˘
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-redis-nodejs
spec:
podSelector:
matchLabels:
service: redis
ingress:
- from:
- podSelector:
matchLabels:
service: nodejs
ports:
- protocol: TCP
port: 6379
á áá°á¨áą ᨠNode.js áá° Redis áá°áĽ áᢠáľáŤáá áá á°ááᢠáĽá á ááá˝ áá ááá ááá á áá¨áá¨áá. á¨ááľááá ááᲠáĽáá°ááŁáŁ á ááľáĄ á¨á°á ááąáľ ááá ááŤáŽá˝ áŤáá°áááš á áľá°áá áááá ááááŤáᢠááá áá á¨áááá á°ááŚáš á ááŤáŠ áŤáá°áŤá°áą ááá˝ áááŽá˝ áá á áá°áá áŠáá˘
ááłáá áá ááá apiVersion
á¨áłáĽá ááľáĽ Kubernetes, ááá áá ááá ááá áĽááłáá ááá áľ á¨áá¨áááááľ ááá á¨áá
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: allow-redis-nodejs
spec:
selector: service == 'redis'
ingress:
- action: Allow
protocol: TCP
source:
selector: service == 'nodejs'
destination:
ports:
- 6379
á¨áá á¨á°ááášáľ áááŁáłáá˝ á áá°á áá á¨á ááłá¨ áá¨áĽ ááᲠââá¤áá á áááá áľáŤáá áááááľ ááá ááá¨áá¨á ááá¨áłáľ áĽá áááľáłááľ á áľá¸á᪠á¨áá á
áá áŤáá¸á áááŁáłáá˝á ááááᢠá áŤáᎠáááł, á¨áá¨ááá á
áá á áááᎠáá° á°ááŤáá áááááĽ, áááἠáĽáť áá action: Allow
áá action: Deny
.
á á á¨áŁá˘ áááá
á áá á ááľ áá°áá áŞáŤ á ááŽáá˛á¨áľ ááľáĽ ááá°áĽá°áĽ á¨áááľ áááŞáŤáá˝á á¨ááŤáááá áľá áááł áĽá ááŤááá á áá áá á°á¨á᪠áľááłáá áŤáľáĄá˘ á°ááá ááľáĽáŤáááľ áŤáá ááἠááá áá˝ááᣠáá á áĽáá°áá á áá á ááŁáŞááľ á¨ááłá ááᢠáá á ááἠá¨ááłáŠ áááá˝ áĽáá°áá¨ááĄ-
ááŽáá´á¨áľ áĽáá° á ááľ á°áἠá á°áᨠá¨á áááááľ á áŤáŁá˘ ááľáĽ á°ááá§á - á ááłáá ááľáĽ áĽáá°áá
áŤá á¨áľá áŚáł áááá.
apiVersion: v1
kind: Namespace
metadata:
labels:
module: prometheus
name: kube-prometheus
ááľá metadata.labels
áá
á á ááŁá á ááá á¨áᢠá¨áá áĽáá°á°á áá°á. namespaceSelector
(áĽáá˛áá podSelector
) á¨áľáŤááá˝ áá áá°áŤáᢠáľááá
ᣠáááŞáŤáá˝ á á ááľ á¨á°áá°á áá°áĽ áá áŤá ááá ááľáá˝ áĽáá˛áá°áą áááááľ á ááľ ááááľ áá፠áá¨á á ááĽááľ (ááá áŤááľ ááá°áą) áĽá á¨á፠áĽáá°áá
áŤá áá
á áá°ááĽáŠáĄ
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-metrics-prom
spec:
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
module: prometheus
ports:
- protocol: TCP
port: 9100
áĽá ᨠCalico ááá˛áá˝á á¨á°á áá ᣠá ááŁáĄ áĽáá°áá áááá
apiVersion: crd.projectcalico.org/v1
kind: NetworkPolicy
metadata:
name: allow-metrics-prom
spec:
ingress:
- action: Allow
protocol: TCP
source:
namespaceSelector: module == 'prometheus'
destination:
ports:
- 9100
á á á áááᣠáá°áá°á ááááśá˝ áĽááá á á áááľ ááá˛áá˝ á áá¨á á áááľá°á ááľáĽ áŁá á áááŹá˝áá˝ áľáŤ áá á¨á°ááŽá ááá áľááá°á áŁááááĽááľ áá¨áá¨á áá˝ááá˘
áĽáá° áŤáᎠááŁáŞáá˝ á áŁá áĽáŠá ááááľ á ááľáĽ á¨á°áááá á "áááá ááá á ááľ áĽá á¨áááááľá á ááá˝ ááááą" á¨ááá á áŤááľ ááá˘
á°á¨á᪠ᨠCalico áááŽá˝á áá áá
ááľáłááľá
á á°áá¨áá ᨠCalico á¤áá ááá˝ áľáĽáľáĽ á ááľ áĽáť áłááá á¨ááśá˝ ááááľá áááŁá á áľá˝ááá
ᢠá áá¨á°áá ááłá á áá áá GlobalNetworkPolicy
á áááľá°á ááľáĽ ᨠICMP áĽáŤááá˝á á¨ááá á˝ááł á°áááˇá (áááłá ᣠááá á¨ááľ áá° ááľááá áááᾠᣠá ááľ ááŤá¨á ᣠááá á¨á áá áá° IP ááľ)
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
name: block-icmp
spec:
order: 200
selector: all()
types:
- Ingress
- Egress
ingress:
- action: Deny
protocol: ICMP
egress:
- action: Deny
protocol: ICMP
á¨áá á á°á áá°á áááłáŁ á¨áááľá°á ááśá˝ á ICMP á áŠá áĽááľ á ááľ âáááłá¨áľâ á ááá ááťááᢠáĽá áá
ááłá á ááłáŞáŤáá˝ áááľá áŤááá GlobalNetworkPolicy
, áá ááľ á áŤá á°á°ááĽáŻá HostEndpoint
:
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
name: deny-icmp-kube-02
spec:
selector: "role == 'k8s-node'"
order: 0
ingress:
- action: Allow
protocol: ICMP
egress:
- action: Allow
protocol: ICMP
---
apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
name: kube-02-eth0
labels:
role: k8s-node
spec:
interfaceName: eth0
node: kube-02
expectedIPs: ["192.168.2.2"]
á¨áŞáá¤á ááłá
á áá¨á¨áťáᣠáá°á á á¨ááá˛áá˝ áľáĽáľáĽ á á áŤááá á¨áŤáᎠá°ááŁáŤáľá áľá á áἠáááľá°á ááľá°ááĽá ááá áá á áŁá áĽááá°á ááłá áĽá°áŁááᢠá¨áľá¨-áá˝ á áááŹá˝áá áááľá¨áľ á°áá ááťá¸á á¨áŞáá¤á ááť áá áááᣠáĽá áá ááłá¨áť á áĽáĽá ááĽáĽá á¨áá°á¨áá áľ áĽá áá áááááľ á á°ááá° áአá¨á áááááľ áááá á¨á°áá°á ááá˘
á°áá áá˝ á¨áŞáá¤á áá á áá°á á á¨UDP áá°áĽ 1194 ááááá áĽá á˛ááá áá° áááľá°á á¨ááľ áĽá á áááááśá˝ ááĄáľ áá¨áŚá˝ ááá ááᢠáĽáá°áá á ááááá áľ áá áĽá á á áľáŤáť áááŚá˝ áá
áľ á áááááśá˝á ááááŁáľ áá áááľ á ááłá¨ áá¨áŚá˝ ááááá˘
á áááአááľáĽ áŤáá áá°áĽ áá°á á áá, áá á á áááŹá˝áá á áááá áĽá áá° áŠá áááľáľ áááľá°á á ááľá°ááá áá°áľ áá á ááłááľ ááŠááśá˝á áŤáľááľáłá. áááłáᣠá ááŤá AWS LoadBalancer á UDP ááľáĽ áŁááá áááľ áá¨á¨áť áá á á°áá°á áááá˝ áááá ááľáĽ áá á áá áłá¨áŁ áĽá ááľáááľ á ááá á¨áááľá°á ááśá˝ áá á ááľá°ááá ááááŤáľ áĽá á áá ááá á áá˝áá áĽá á¨á áááá ááłááá˝á áĽááľ ááááŤáľ á¨áááťá ááᢠá¨áľá á°áľ ááťáťá ááááá˝á˘ á á°á¨ááŞáᣠááŁáŞáá á¨áá°áĽ ááá ááá¨á á ááĽá ...
ááá á¨áá˝á áááľááá˝á á áááá ááááŤáľ, á¨áá¨á°áá á°ááá§á.
- áŞáá¤á áŤáá¸á ááśá˝ á á ááľ ááľááá ááááľ áááááĽá á°áááá¸áá
hostNetwork
, áááľá, áá° áľááááá á áá. - á áááááą á áá á áŠá á¨á°áá á ááá˘
ClusterIP
. á ááľááá ááááľ áá á ááľ áá°áĽ á á áŤá á°áááᣠáá á á¨ááá á áĽáá á á¨á°áŤá áŚáłáá˝ (á¨áĽááá°á á áá á áľáŤáť ááá) á°á°áŤá˝ ááᢠ- ááľ áŽá áŤáá áľá ááľááá ááááľ ááá°á á¨áłáŞáŤá˝á áá°á á áá ááᢠáĽá áĽááá ᣠá áááááąá á ááľááá ááááľ áá á áĽáĽá âááľááâ ááá áľáá˝ á¨áá ááŞá á áááááľ á áá áŤááá á¨áŞáá¤á á áááááľ á áá á áľáŤáť á¨áááŁá á áĽá á á°áá áá˝ á¨á°ááááĄáľá á¨á˛ á¤á á¤áľ ááááŚá˝á á¨ááŤáľá°áŤáá - á á ááἠáŤáá ááá áááá˘
á¨ááááá á áááᣠá¨áŞáá¤á á°áá áá á áŞáá¤á á áááá á áá°á á á¨á áá á áľáŤáťá ááá¨áľ áĽáá˝áááᢠá¨áá á áłá˝ á á°á áá°á áŹá˛áľ áá á¨á°ááá¸á á¨áá á áááľ á°áá áá á¨á áááááśá˝ ááłá¨áť á¨ááá°áĽ ááłá ááłá á ááĄ-
apiVersion: crd.projectcalico.org/v1
kind: HostEndpoint
metadata:
name: vpnclient-eth0
labels:
role: vpnclient
environment: production
spec:
interfaceName: "*"
node: kube-02
expectedIPs: ["172.176.176.2"]
---
apiVersion: crd.projectcalico.org/v1
kind: GlobalNetworkPolicy
metadata:
name: vpn-rules
spec:
selector: "role == 'vpnclient'"
order: 0
applyOnForward: true
preDNAT: true
ingress:
- action: Deny
protocol: TCP
destination:
ports: [6379]
- action: Allow
protocol: UDP
destination:
ports: [53, 67]
áĽáá ᣠáá°áĽ 6379 áááááľ á áĽáĽá á¨á°á¨áá¨á áá ᣠáá á á°ááłáłá áá á¨á˛ á¤á á¤áľ á áááááľ áĽáŤ á°á áĽá áááŤá ᣠáá á ááá˝á á˛áŤáᣠáĽá áá áá ááŤá ᢠááááŤáąá áá°á á˛á áĽáá°á°áááá á ááľ ááŤá á˛áᣠááŁáŞá ááľá ááᲠá áá ááአáŤáá°ááḠá áľá°áá á áĽáą áá áá°áá áŤáá˘
áá¤áśá˝
áľááá á¨Calico á¨áá á¤áá áá á áá áá á áááľá°á ááľáĽ áĽá á ááŞáŤá áŤááá á á áŁáŤ á á°áááá áááá áĽá á á°áááá ááááľ ááá¨á áá˝ááᢠá á á ááá á á ááá áľáá˘áŚá˝á á ááľá áá°áŽáľ áááľá áá˝ááᣠáĽá á¨á¤á 3 ááľáááá ᨠBGP áĽá IP-IP ááťáá˝ áá áá°áá አá á ááŁá á ááłá¨áá¨áĽ áá á ááá á¨áŠá áááľáľ áááľ ááľáĽ á áŁá á áľá᪠áááľáá ... ááá ᣠáá áŤááá ááŁáŞáŤá á áŁá á áá áĽá á áá áááľááᢠ.
á¨á°á áááľ ááľáááśá˝á áááááľ áááľá°áá áááá áááá á¨ááťá áááá áá˝ááᣠáĽá áĽáá áá áŤáᎠ(ááá á°ááłáłá áááľá) áááłá á¨áááŁáᢠá áá á˝áá ááľáĽ á¨á°á°áĄáľ ááłááá˝ (á áĽáá á ááťáťáŤáá˝) á AWS ááľáĽ á á ááŤáł á¨á°áá ááťá˝á áááśá˝ ááľáĽ áĽá á áá ááááá˘
PS
á áĽááá˝á áá áŤááĽáĄáĄ-
- ÂŤ
áá°á áááľ áŁáááŤáá˝ á¨áŠá áááľáľ á ááłá¨ áá¨áĽ ááá˛áá˝ ááá˘áŤ "; - "á áŠá áááľáľ ááľáĽ áá ááłá¨áá¨áĽ á¨á°áĽáŤáŤ áááŞáŤ"áĄ-
ááá 1 áĽá 2 (á¨ááľááá áá´á ᣠá°á°áŤá˘ á ááłá¨ áá¨áŚá˝) ,ááá 3 (á áááááľ áĽá á¨áľáŤáá áá°áľ) ; - ÂŤ
áŽáá´ááá á ááłá¨áá¨áĽ á áááá˝ (á˛á¤áá á) - á¨á ááłá¨ áá¨áĽ á áááá˝ áĽá áááááľ ááŤáŁáá˝ áá°á á Âť.
ááá: hab.com