Sobes.tech
Middle+

კონტეინერებს შორის ქსელური ურთიერთქმედების სფეროში რა რთული დავალებები მოგიწიათ გადაჭრა?

sobes.tech AI

პასუხი AI-სგან

Istio-ზე დაფუძნებული mesh-ქსელში სერვისებს შორის ქსელური ურთიერთქმედების ოპტიმიზაცია. საჭირო იყო გამოვლინება და გამორიცხვა ბლოკირების ადგილები, რომლებიც დაკავშირებული იყო Service Proxy (Envoy)-ის ზედმეტობასთან, mTLS-ის კონფიგურაციასთან და პოლიტიკის მექანიზმთან. ეს მოიცავდა Istio-ის მეტრიკების (მოთხოვნის ხანგრძლივობა, შეცდომების რაოდენობა, დაგვიანებები) ანალიზს, განაწილებული მოთხოვნების ტრასირებას და Envoy-ის კონფიგურაციის ოპტიმიზაციას.

დინამიკურად მასშტაბირებადი Kubernetes კლასტერების ტრაფიკის მარშრუტიზაციის პრობლემების გადაჭრა. სერვისების მასშტაბის ცვლილებისას წარმოიშვებოდა დაგვიანებები EndpointSlices-ის გავრცელებაში და არასწორი დატვირთვის განაწილებაში. ეს გადაწყდა უფრო აგრესიული cache-ის timeout-ების კონფიგურაციით kube-proxy-ში და მოწინავე ბალანსის ალგორითმების გამოყენებით ingress კონტროლერში (მაგ., least_request).

უსაფრთხო და საიმედო ურთიერთქმედების განხორციელება სხვადასხვა სუბნეტებში კონტეინერებს შორის, მკაცრი ქსელური პოლიტიკების (Network Policies) წესებით. პოლიტიკების კონფიგურაცია უნდა ყოფილიყო ისეთი, რომ მხოლოდ საჭირო ტრაფიკი ნებადართულიყო კონკრეტული პოდების ან namespace-ების შორის, ხოლო დანარჩენი ბლოკილიყო. ეს მოითხოვდა ღრმა გაგებას Network Policies-ის სელექტორებისა და მათი გამოყენების მექანიზმების, ასევე მხარე CNI პლაგინების (მაგ., Calico) საშუალებით.

DNS-ის პრობლემების დებაგირება კონტეინერებში, განსაკუთრებით ისეთ გარემოებში, სადაც რამდენიმე DNS სერვერი ან რთული გადამისამართების წესები იყო. საჭირო იყო ტრაფიკის ანალიზი პოდების დონეზე tcpdump-ის გამოყენებით და კონფიგურაციის შემოწმება /etc/resolv.conf-ში, ასევე CoreDNS-ის კონფიგურაციის შემოწმება Kubernetes კლასტერში.

# DNS ტრაფიკის ანალიზის მაგალითი პოდში
kubectl exec <pod-name> -- tcpdump -i any udp port 53 -v
# NetworkPolicy-ის მაგალითი, რომელიც ნებადართავს ტრაფიკს ორ namespace-ს შორის
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: frontend-namespace
spec:
  podSelector:
    matchLabels:
      app: frontend
  policyTypes:
    - Egress
  egress:
    - to:
      - podSelector:
          matchLabels:
            app: backend
        namespaceSelector:
          matchLabels:
            name: backend-namespace

განსაკუთრებული ყურადღება უნდა მიექცეს არასტანდარტული პროტოკოლების გამოყენებას, რომლებიც ვერ მხარდაჭერილია "კატორიდან" Service Mesh ან CNI დონეზე, და საჭიროებს პერსონალიზებულ კონფიგურაციას, მაგალითად, საკუთარი Envoy ფილტრების დაწერას, თუ პროტოკოლი განსხვავდება HTTP/1.1 ან gRPC-დან.