შესაძლებელია თუ არა ერთ სახელის სივრცის აპლიკაციას სხვა სახელის სივრცის აპლიკაცია კლასტერში ნახოს?
sobes.tech AI
პასუხი AI-სგან
დიახ, სხვადასხვა სახელების სივრცეში (namespace) განლაგებული პროგრამები ერთმანეთის ხედვას შეძლებენ კლასტერში.
Kubernetes-ში, namespace-ები ლოგიკური იზოლაციებია, რომლებიც რესურსების ორგანიზებაში ეხმარება. ისინი არ წარმოადგენს ქსელურ იზოლაციას სტანდარტულად.
Namespace-ებს შორის ურთიერთქმედება შესაძლებელია Kubernetes-ის DNS სერვისების მეშვეობით.
namespace-a-ში განლაგებული პროგრამა შეიძლება მიაწვდინოს my-service სახელწოდების სერვისს namespace-b-ში, მისი სრული დომენის სახელი (FQDN) გამოყენებით:
<სერვისის სახელი>.<namespace-ის სახელი>.svc.cluster.local
მაგალითი: my-service.namespace-b.svc.cluster.local
ასევე, შესაძლებელია მოკლე სახელი გამოიყენოს, თუ DNS კლასტერში სწორად არის კონფიგურირებული, მაგრამ FQDN ყოველთვის უფრო საიმედოა namespace-ებს შორის ურთიერთქმედებისთვის.
# მაგალითი სერვისის namespace-b-ში
apiVersion: v1
kind: Service
metadata:
name: my-service # სერვისის სახელი
namespace: namespace-b # სერვისის namespace
spec:
selector:
app: my-app # სელექტორი პოდებისთვის, რომელთაც სერვისი მიმართავს
ports:
- protocol: TCP
port: 80
targetPort: 8080
# მაგალითი პოდის namespace-a-ში, რომელიც მიიწვდის სერვისს namespace-b-ში
apiVersion: v1
kind: Pod
metadata:
name: consumer-pod
namespace: namespace-a # მომხმარებლის namespace
spec:
containers:
- name: consumer-container
image: my-consumer-image
command: ["curl", "my-service.namespace-b.svc.cluster.local"] # მისამართი სხვა namespace-ის სერვისისთვის
მნიშვნელოვანია აღინიშნოს, რომ ქსელური პოლიტიკები (Network Policies) შეიძლება გამოყენებულ იქნას — namespace-ებს შორის ურთიერთქმედების შეზღუდვისთვის. სტანდარტულად, თუ ასეთი პოლიტიკები არ არსებობს, ურთიერთქმედება ნებადართულია.
ქსელური პოლიტიკები განსაზღვრავს პოდების ჯგუფებს, რომლებიც შეუძლიათ ურთიერთქმედება ერთმანეთთან, მათი namespace-ებისა და ეტიკეტების საფუძველზე.