కాలికో నెట్వర్క్ ప్లగ్ఇన్ హార్డ్వేర్ హోస్ట్లు, వర్చువల్ మెషీన్లు మరియు పాడ్లను రక్షించడానికి ఏకీకృత సింటాక్స్తో విస్తృత శ్రేణి నెట్వర్క్ విధానాలను అందిస్తుంది. ఈ విధానాలు నేమ్స్పేస్లో వర్తించవచ్చు లేదా వర్తించే గ్లోబల్ నెట్వర్క్ విధానాలు కావచ్చు
కుబెర్నెట్స్ మరియు కాలికో నెట్వర్క్ విధానాలు ఎలా పని చేస్తాయనే దాని గురించి మీకు ప్రాథమిక అవగాహన ఉందని ఈ కథనం ఊహిస్తుంది. కాకపోతే, ప్రయత్నించమని మేము సిఫార్సు చేస్తున్నాము
కాలికో
ప్రాథమిక స్థాయిలో, కాలికో ఒక పాడ్ను నెట్వర్క్కి కనెక్ట్ చేసినప్పుడు (క్రింద ఉన్న రేఖాచిత్రాన్ని చూడండి), అది వర్చువల్ ఈథర్నెట్ ఇంటర్ఫేస్ (వెత్)ని ఉపయోగించి హోస్ట్కి కనెక్ట్ చేస్తుంది. పాడ్ పంపిన ట్రాఫిక్ ఈ వర్చువల్ ఇంటర్ఫేస్ నుండి హోస్ట్కి వస్తుంది మరియు అది ఫిజికల్ నెట్వర్క్ ఇంటర్ఫేస్ నుండి వచ్చిన విధంగానే ప్రాసెస్ చేయబడుతుంది. డిఫాల్ట్గా, కాలికో ఈ ఇంటర్ఫేస్లకు caliXXX అని పేరు పెట్టింది. ట్రాఫిక్ వర్చువల్ ఇంటర్ఫేస్ ద్వారా వస్తుంది కాబట్టి, పాడ్ ఒక హాప్ దూరంలో ఉన్నట్లుగా అది iptables ద్వారా వెళుతుంది. అందువల్ల, ట్రాఫిక్ పాడ్కు/నుండి వచ్చినప్పుడు, అది హోస్ట్ పాయింట్ ఆఫ్ వ్యూ నుండి ఫార్వార్డ్ చేయబడుతుంది.
కాలికో నడుస్తున్న కుబెర్నెటెస్ నోడ్లో, మీరు కింది విధంగా పనిభారానికి వర్చువల్ ఇంటర్ఫేస్ (వెత్)ని మ్యాప్ చేయవచ్చు. దిగువ ఉదాహరణలో, కాలికో-మానిటరింగ్ నేమ్స్పేస్లో veth#10 (calic1cbf1ca0f8) cnx-manager-*కి కనెక్ట్ చేయబడిందని మీరు చూడవచ్చు.
[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
inet6 fe80::ecee:eeff:feee:eeee/64 scope link
valid_lft forever preferred_lft forever
...
[centos@ip-172-31-31-46 K8S]$ calicoctl get wep --all-namespaces
...
calico-monitoring cnx-manager-8f778bd66-lz45m ip-172-31-31-46.ec2.internal 192.168.103.134/32
calic1cbf1ca0f8
...
కాలికో ప్రతి పనిభారానికి వెత్ ఇంటర్ఫేస్ని సృష్టిస్తుంది కాబట్టి, అది విధానాలను ఎలా అమలు చేస్తుంది? దీన్ని చేయడానికి, కాలికో iptablesని ఉపయోగించి ప్యాకెట్ ప్రాసెసింగ్ మార్గంలోని వివిధ గొలుసులలో హుక్స్లను సృష్టిస్తుంది.
దిగువ రేఖాచిత్రం iptables (లేదా netfilter సబ్సిస్టమ్)లో ప్యాకెట్ ప్రాసెసింగ్లో పాల్గొన్న గొలుసులను చూపుతుంది. ఒక ప్యాకెట్ నెట్వర్క్ ఇంటర్ఫేస్ ద్వారా వచ్చినప్పుడు, అది ముందుగా PREROUTING చైన్ ద్వారా వెళుతుంది. అప్పుడు రూటింగ్ నిర్ణయం తీసుకోబడుతుంది మరియు దీని ఆధారంగా, ప్యాకెట్ INPUT (హోస్ట్ ప్రాసెస్లకు నిర్దేశించబడింది) లేదా ఫార్వర్డ్ (నెట్వర్క్లోని పాడ్ లేదా మరొక నోడ్కి మళ్లించబడుతుంది) ద్వారా వెళుతుంది. స్థానిక ప్రక్రియ నుండి, ప్యాకెట్ ఔట్పుట్ గుండా వెళుతుంది మరియు కేబుల్ను పంపే ముందు చైన్ను పోస్ట్ చేస్తుంది.
iptables ప్రాసెసింగ్ పరంగా పాడ్ కూడా బాహ్య ఎంటిటీ (వెత్కి కనెక్ట్ చేయబడింది) అని గమనించండి. సారాంశం చేద్దాం:
- ఫార్వార్డ్ చేయబడిన ట్రాఫిక్ (నాట్, రూట్ చేయబడిన లేదా పాడ్ నుండి/నుండి) PREROUTING - FORWARD - POSTROUTING గొలుసుల గుండా వెళుతుంది.
- స్థానిక హోస్ట్ ప్రాసెస్కి ట్రాఫిక్ ప్రిరౌటింగ్ - ఇన్పుట్ చైన్ ద్వారా వెళుతుంది.
- స్థానిక హోస్ట్ ప్రాసెస్ నుండి ట్రాఫిక్ అవుట్పుట్ - పోస్ట్రూటింగ్ చైన్ గుండా వెళుతుంది.
కాలికో మీరు అన్ని గొలుసులలో పాలసీలను వర్తింపజేయడానికి అనుమతించే పాలసీ ఎంపికలను అందిస్తుంది. దానిని దృష్టిలో ఉంచుకుని, కాలికోలో అందుబాటులో ఉన్న విభిన్న పాలసీ కాన్ఫిగరేషన్ ఎంపికలను చూద్దాం. దిగువ ఎంపికల జాబితాలోని సంఖ్యలు ఎగువ రేఖాచిత్రంలోని సంఖ్యలకు అనుగుణంగా ఉంటాయి.
- వర్క్లోడ్ ఎండ్పాయింట్ (పాడ్) విధానం
- హోస్ట్ ఎండ్పాయింట్ విధానం
- ApplyOnForward ఎంపిక
- PreDNAT విధానం
- ట్రాక్ చేయని విధానం
వర్క్లోడ్ ఎండ్పాయింట్లకు (కుబెర్నెట్స్ పాడ్లు లేదా ఓపెన్స్టాక్ VMలు) విధానాలు ఎలా వర్తింపజేయబడతాయో చూడటం ద్వారా ప్రారంభిద్దాం, ఆపై హోస్ట్ ఎండ్ పాయింట్ల కోసం పాలసీ ఎంపికలను చూద్దాం.
పనిభారం ముగింపు పాయింట్లు
వర్క్లోడ్ ఎండ్పాయింట్ పాలసీ (1)
ఇది మీ కుబెర్నెట్స్ పాడ్లను రక్షించడానికి ఒక ఎంపిక. కాలికో కుబెర్నెటెస్ నెట్వర్క్ పాలసీతో పనిచేయడానికి మద్దతు ఇస్తుంది, అయితే ఇది అదనపు పాలసీలను కూడా అందిస్తుంది - కాలికో నెట్వర్క్ పాలసీ మరియు గ్లోబల్ నెట్వర్క్ పాలసీ. కాలికో ప్రతి పాడ్ (వర్క్లోడ్) కోసం ఒక గొలుసును సృష్టిస్తుంది మరియు వర్క్లోడ్ కోసం INPUT మరియు OUTPUT చైన్లలో FORWARD చైన్ యొక్క ఫిల్టర్ టేబుల్కి హుక్స్ చేస్తుంది.
హోస్ట్ ముగింపు పాయింట్లు
హోస్ట్ ఎండ్పాయింట్ పాలసీ (2)
CNI (కంటైనర్ నెట్వర్క్ ఇంటర్ఫేస్)తో పాటు, కాలికో విధానాలు హోస్ట్ను రక్షించుకునే సామర్థ్యాన్ని అందిస్తాయి. కాలికోలో, మీరు హోస్ట్ ఇంటర్ఫేస్ మరియు అవసరమైతే పోర్ట్ నంబర్ల కలయికను పేర్కొనడం ద్వారా హోస్ట్ ఎండ్పాయింట్ను సృష్టించవచ్చు. ఇన్పుట్ మరియు అవుట్పుట్ చైన్లలోని ఫిల్టర్ టేబుల్ని ఉపయోగించి ఈ ఎంటిటీకి సంబంధించిన పాలసీ ఎన్ఫోర్స్మెంట్ సాధించబడుతుంది. మీరు రేఖాచిత్రం నుండి చూడగలిగినట్లుగా, (2) అవి నోడ్/హోస్ట్లోని స్థానిక ప్రక్రియలకు వర్తిస్తాయి. అంటే, మీరు హోస్ట్ ఎండ్పాయింట్కు వర్తించే విధానాన్ని రూపొందించినట్లయితే, అది మీ పాడ్లకు వెళ్లే/వెళ్లే ట్రాఫిక్ను ప్రభావితం చేయదు. కానీ ఇది కాలికో విధానాలను ఉపయోగించి మీ హోస్ట్ మరియు పాడ్ల కోసం ట్రాఫిక్ను నిరోధించడానికి ఒకే ఇంటర్ఫేస్/సింటాక్స్ను అందిస్తుంది. ఇది భిన్నమైన నెట్వర్క్ కోసం పాలసీలను నిర్వహించే ప్రక్రియను చాలా సులభతరం చేస్తుంది. క్లస్టర్ భద్రతను మెరుగుపరచడానికి హోస్ట్ ఎండ్పాయింట్ విధానాలను కాన్ఫిగర్ చేయడం మరొక ముఖ్యమైన ఉపయోగ సందర్భం.
దరఖాస్తు ఆన్ఫార్వర్డ్ పాలసీ (3)
హోస్ట్ ద్వారా ఫార్వార్డ్ చేయబడే ట్రాఫిక్తో సహా హోస్ట్ ఎండ్పాయింట్ గుండా వెళ్లే అన్ని ట్రాఫిక్లకు విధానాలను వర్తింపజేయడానికి కాలికో గ్లోబల్ నెట్వర్క్ విధానంలో ApplyOnForward ఎంపిక అందుబాటులో ఉంది. ఇది స్థానిక పాడ్కు లేదా నెట్వర్క్లో ఎక్కడైనా ఫార్వార్డ్ చేయబడిన ట్రాఫిక్ను కలిగి ఉంటుంది. PreDNATని ఉపయోగించే విధానాల కోసం కాలికోకు ఈ సెట్టింగ్ని ప్రారంభించడం అవసరం మరియు ట్రాక్ చేయబడలేదు, క్రింది విభాగాలను చూడండి. అదనంగా, వర్చువల్ రూటర్ లేదా సాఫ్ట్వేర్ NAT ఉపయోగించిన సందర్భాల్లో హోస్ట్ ట్రాఫిక్ను పర్యవేక్షించడానికి ApplyOnForward ఉపయోగించవచ్చు.
మీరు హోస్ట్ ప్రాసెస్లు మరియు పాడ్లు రెండింటికీ ఒకే నెట్వర్క్ విధానాన్ని వర్తింపజేయాలనుకుంటే, మీరు ApplyOnForward ఎంపికను ఉపయోగించాల్సిన అవసరం లేదని గమనించండి. మీరు చేయాల్సిందల్లా అవసరమైన హోస్ట్ఎండ్ పాయింట్ మరియు వర్క్లోడ్ ఎండ్పాయింట్ (పాడ్) కోసం ఒక లేబుల్ని సృష్టించడం. ఎండ్పాయింట్ రకం (హోస్టెండ్పాయింట్ లేదా వర్క్లోడ్)తో సంబంధం లేకుండా లేబుల్ల ఆధారంగా పాలసీని అమలు చేయడానికి కాలికో తెలివైనది.
PreDNAT విధానం (4)
కుబెర్నెట్స్లో, సర్వీస్ ఎంటిటీ పోర్ట్లను నోడ్పోర్ట్స్ ఎంపికను ఉపయోగించి బాహ్యంగా బహిర్గతం చేయవచ్చు లేదా ఐచ్ఛికంగా (కాలికోను ఉపయోగిస్తున్నప్పుడు), క్లస్టర్ IPలు లేదా బాహ్య IPల ఎంపికలను ఉపయోగించి వాటిని ప్రచారం చేయడం ద్వారా వాటిని బహిర్గతం చేయవచ్చు. Kube-proxy DNATని ఉపయోగించి సంబంధిత సేవ యొక్క పాడ్లకు సేవకు కట్టుబడి ఉండే ఇన్కమింగ్ ట్రాఫిక్ను బ్యాలెన్స్ చేస్తుంది. దీన్ని బట్టి, మీరు నోడ్పోర్ట్ల ద్వారా వచ్చే ట్రాఫిక్ కోసం విధానాలను ఎలా అమలు చేస్తారు? DNAT (ఇది హోస్ట్:పోర్ట్ మరియు సంబంధిత సేవ మధ్య మ్యాపింగ్) ద్వారా ట్రాఫిక్ ప్రాసెస్ చేయబడే ముందు ఈ విధానాలు వర్తింపజేయబడతాయని నిర్ధారించుకోవడానికి, కాలికో గ్లోబల్ నెట్వర్క్ పాలసీ కోసం "preDNAT: true" అనే పరామితిని అందిస్తుంది.
ప్రీ-DNAT ప్రారంభించబడినప్పుడు, ఈ విధానాలు (4) రేఖాచిత్రంలో - PREROUTING చైన్ యొక్క మాంగిల్ టేబుల్లో - DNATకి ముందు వెంటనే అమలు చేయబడతాయి. ట్రాఫిక్ ప్రాసెసింగ్ మార్గంలో ఈ పాలసీల అప్లికేషన్ చాలా ముందుగానే జరుగుతుంది కాబట్టి, సాధారణ విధానాల క్రమం ఇక్కడ అనుసరించబడదు. అయితే, preDNAT విధానాలు తమలో తాము దరఖాస్తు చేసుకునే క్రమాన్ని గౌరవిస్తాయి.
ప్రీ-DNATతో పాలసీలను రూపొందించేటప్పుడు, మీరు ప్రాసెస్ చేయాలనుకుంటున్న ట్రాఫిక్ గురించి జాగ్రత్తగా ఉండటం మరియు మెజారిటీని తిరస్కరించడానికి అనుమతించడం చాలా ముఖ్యం. ప్రీ-డిఎన్ఎటి పాలసీలో 'అనుమతించు' అని గుర్తు పెట్టబడిన ట్రాఫిక్ ఇకపై హోస్టెండ్పాయింట్ పాలసీ ద్వారా తనిఖీ చేయబడదు, అయితే ప్రీ-డిఎన్ఎటి పాలసీని విఫలమైన ట్రాఫిక్ మిగిలిన చైన్ల ద్వారా కొనసాగుతుంది.
కాలికో preDNATని ఉపయోగిస్తున్నప్పుడు applyOnForward ఎంపికను ప్రారంభించడాన్ని తప్పనిసరి చేసింది, ఎందుకంటే నిర్వచనం ప్రకారం ట్రాఫిక్ యొక్క గమ్యం ఇంకా ఎంచుకోబడలేదు. ట్రాఫిక్ని హోస్ట్ ప్రాసెస్కి మళ్లించవచ్చు లేదా పాడ్ లేదా మరొక నోడ్కి ఫార్వార్డ్ చేయవచ్చు.
ట్రాక్ చేయని విధానం (5)
నెట్వర్క్లు మరియు అప్లికేషన్లు ప్రవర్తనలో పెద్ద తేడాలను కలిగి ఉంటాయి. కొన్ని విపరీతమైన సందర్భాల్లో, అప్లికేషన్లు అనేక స్వల్పకాలిక కనెక్షన్లను రూపొందించవచ్చు. ఇది contrack (Linux నెట్వర్కింగ్ స్టాక్లోని ప్రధాన భాగం) మెమరీ అయిపోవడానికి కారణం కావచ్చు. సాంప్రదాయకంగా, Linuxలో ఈ రకమైన అప్లికేషన్లను అమలు చేయడానికి, మీరు conntrackని మాన్యువల్గా కాన్ఫిగర్ చేయాలి లేదా డిసేబుల్ చేయాలి లేదా conntrack బైపాస్ చేయడానికి iptables నియమాలను వ్రాయాలి. మీరు వీలైనంత త్వరగా కనెక్షన్లను ప్రాసెస్ చేయాలనుకుంటే కాలికోలో అన్ట్రాక్డ్ పాలసీ సరళమైన మరియు మరింత సమర్థవంతమైన ఎంపిక. ఉదాహరణకు, మీరు భారీగా ఉపయోగిస్తే
దీన్ని చదువు
మీరు కాలికో గ్లోబల్ నెట్వర్క్ పాలసీలో "doNotTrack: true" ఎంపికను సెట్ చేసినప్పుడు, ఇది **ట్రాక్ చేయని** విధానం అవుతుంది మరియు Linux ప్యాకెట్ ప్రాసెసింగ్ పైప్లైన్లో చాలా ముందుగానే వర్తించబడుతుంది. ఎగువన ఉన్న రేఖాచిత్రాన్ని చూస్తే, కనెక్షన్ ట్రాకింగ్ (కాంట్ట్రాక్) ప్రారంభించబడటానికి ముందు ముడి పట్టికలోని PREROUTING మరియు OUTPUT చైన్లలో అన్ట్రాక్ చేయని విధానాలు వర్తింపజేయబడతాయి. అన్ట్రాక్ చేయని విధానం ద్వారా ప్యాకెట్ అనుమతించబడినప్పుడు, ఆ ప్యాకెట్ కోసం కనెక్షన్ ట్రాకింగ్ని నిలిపివేయడానికి అది గుర్తించబడుతుంది. అంటే:
- ట్రాక్ చేయని విధానం ఒక్కో ప్యాకెట్ ఆధారంగా వర్తించబడుతుంది. కనెక్షన్ (లేదా ప్రవాహం) యొక్క భావన లేదు. కనెక్షన్లు లేకపోవడం అనేక ముఖ్యమైన పరిణామాలను కలిగి ఉంది:
- మీరు అభ్యర్థన మరియు ప్రతిస్పందన ట్రాఫిక్ రెండింటినీ అనుమతించాలనుకుంటే, మీకు ఇన్బౌండ్ మరియు అవుట్బౌండ్ రెండింటికీ ఒక నియమం అవసరం (కాలికో సాధారణంగా ప్రతిస్పందన ట్రాఫిక్ను అనుమతించినట్లుగా గుర్తించడానికి కాంట్రాక్ని ఉపయోగిస్తుంది కాబట్టి).
- ట్రాక్ చేయని విధానం Kubernetes పనిభారం (పాడ్లు) కోసం పని చేయదు, ఎందుకంటే ఈ సందర్భంలో పాడ్ నుండి అవుట్గోయింగ్ కనెక్షన్ని ట్రాక్ చేయడానికి మార్గం లేదు.
- ట్రాక్ చేయని ప్యాకెట్లతో NAT సరిగ్గా పని చేయదు (కెర్నల్ NAT మ్యాపింగ్ను కాంట్రాక్లో నిల్వ చేస్తుంది కాబట్టి).
- అన్ట్రాక్ చేయని విధానంలో "అన్నింటిని అనుమతించు" నియమాన్ని దాటుతున్నప్పుడు, అన్ని ప్యాకెట్లు అన్ట్రాక్ చేయబడినట్లు గుర్తించబడతాయి. ఇది దాదాపు ఎల్లప్పుడూ మీరు కోరుకునేది కాదు, కాబట్టి ట్రాక్ చేయని విధానాల ద్వారా అనుమతించబడిన ప్యాకెట్ల గురించి చాలా ఎంపిక చేసుకోవడం ముఖ్యం (మరియు చాలా ట్రాఫిక్ని సాధారణ ట్రాక్ చేసిన విధానాల ద్వారా వెళ్ళడానికి అనుమతించండి).
- ట్రాక్ చేయని విధానాలు ప్యాకెట్ ప్రాసెసింగ్ పైప్లైన్ ప్రారంభంలోనే వర్తించబడతాయి. కాలికో విధానాలను రూపొందించేటప్పుడు ఇది అర్థం చేసుకోవడం చాలా ముఖ్యం. మీరు ఆర్డర్:1తో పాడ్ పాలసీని మరియు ఆర్డర్:1000తో ట్రాక్ చేయని పాలసీని కలిగి ఉండవచ్చు. పర్వాలేదు. పాడ్ కోసం పాలసీకి ముందు అన్ట్రాక్డ్ పాలసీ వర్తించబడుతుంది. ట్రాక్ చేయని విధానాలు తమలో తాము మాత్రమే అమలు క్రమాన్ని గౌరవిస్తాయి.
Linux ప్యాకెట్ ప్రాసెసింగ్ పైప్లైన్లో చాలా ముందుగానే పాలసీని అమలు చేయడం doNotTrack విధానం యొక్క ప్రయోజనాల్లో ఒకటి కాబట్టి, doNotTrackని ఉపయోగిస్తున్నప్పుడు ApplyOnForward ఎంపికను పేర్కొనడం Calico తప్పనిసరి చేసింది. ప్యాకెట్ ప్రాసెసింగ్ రేఖాచిత్రాన్ని సూచిస్తూ, ఏదైనా రూటింగ్ నిర్ణయాలకు ముందు అన్ట్రాక్ చేయని(5) విధానం వర్తింపజేయబడిందని గమనించండి. ట్రాఫిక్ని హోస్ట్ ప్రాసెస్కి మళ్లించవచ్చు లేదా పాడ్ లేదా మరొక నోడ్కి ఫార్వార్డ్ చేయవచ్చు.
ఫలితాలు
మేము కాలికోలోని వివిధ విధాన ఎంపికలను (హోస్ట్ ఎండ్పాయింట్, అప్లైఆన్ఫార్వర్డ్, ప్రీడిఎన్ఎటి మరియు అన్ట్రాక్డ్) మరియు ప్యాకెట్ ప్రాసెసింగ్ మార్గంలో అవి ఎలా వర్తింపజేయబడతాయో పరిశీలించాము. వారు ఎలా పని చేస్తారో అర్థం చేసుకోవడం సమర్థవంతమైన మరియు సురక్షితమైన విధానాలను అభివృద్ధి చేయడంలో సహాయపడుతుంది. కాలికోతో మీరు లేబుల్కి (నోడ్లు మరియు పాడ్ల సమూహం) వర్తించే గ్లోబల్ నెట్వర్క్ విధానాన్ని ఉపయోగించవచ్చు మరియు వివిధ పారామితులతో విధానాలను వర్తింపజేయవచ్చు. ఇది కాలికో విధానాలతో ఒకే పాలసీ భాషను ఉపయోగించి ఒకేసారి "ప్రతిదీ" (ఎండ్పాయింట్ రకాలు) సౌకర్యవంతంగా రక్షించడానికి భద్రత మరియు నెట్వర్క్ డిజైన్ నిపుణులను అనుమతిస్తుంది.
రసీదు: నేను ధన్యవాదాలు చెప్పాలనుకుంటున్నాను
మూలం: www.habr.com