Middle
Ինչպե՞ս կարող ենք մուտք գործել Kubernetes կոնտեյներին, որտեղ աշխատում է հավելվածը, արտաքին ցանցից:
sobes.tech AI
Պատասխան AI-ից
Կան մի քանի հիմնական եղանակներ՝ ինչպես հասնել Kubernetes կոնտեյների, արտաքին ցանցից:
-
LoadBalancer տեսակի ծառայություն:
- Cloud մատակարարները (AWS, GCP, Azure) ստեղծում են արտաքին բեռի հավասարակշռիչ, որը ուղղորդում է տրաֆիկը ձեր հավելվածի պոդերին:
- Նշվում է արտաքին IP հասցե:
- Ամենահեշտ միջոցը облаկային միջավայրում:
-
NodePort տեսակի ծառայություն:
- Բացում է պորտը յուրաքանչյուր հանգույցում:
- Այս պորտը ուղղորդում է տրաֆիկը ձեր հավելվածի ծառայությանը:
- Հասանելի է ցանկացած հանգույցի IP հասցեով և NodePort համարով:
- Ավելի քիչ մասշտաբային և անվտանգ, քան LoadBalancer:
-
ClusterIP տեսակի ծառայություն և Ingress միասին:
- ClusterIP՝ միայն ներսում հասանելի:
- Ingress՝ API օբյեկտ, որը կառավարում է արտաքին մուտքը ծառայությունների:
- Ingress վերահսկիչը (օրինակ՝ Nginx Ingress Controller, Traefik) լսում է արտաքին տրաֆիկը և ուղղորդում այն համապատասխան ClusterIP ծառայությանը:
- Կենտրոնական կառավարում՝ երթևեկության, SSL-տերմինացման, բեռի հավասարակշռման:
- Գնահատելի և մասշտաբային մոտեցում:
-
ExternalName տեսակի ծառայություն:
- Ստեղծում է արտաքին դոմենի псևդոնիմ:
- Չպատասխանատու է կոնտեյների ուղիղ մուտքի համար, բայց թույլ է տալիս օգտագործել DNS անունը ներսում՝ արտաքին ռեսուրսին հասնելու համար:
- Չի հարմար՝ կոնտեյների ուղիղ մուտքի համար՝ դուրս:
-
Ուղիղ մուտք NodePort/HostPort-ով՝ Pod-ի վրա:
- Կարող եք նշել
hostPort-ը Pod-ի բնութագրում՝ բացելու պորտը հանգույցում, որտեղ աշխատում է Pod-ը: - Չի խորհուրդ տրվում արտադրական միջավայրում՝ ցածր կառավարման և պոտենցիալ կոնֆլիկտների պատճառով:
- Նմանապես,
nodePort-ը կարող եք նշել NodePort տեսակի ծառայությունում:
- Կարող եք նշել
Կոնֆիգուրացիայի օրինակներ:
-
LoadBalancer ծառայություն:
// service.yaml apiVersion: v1 kind: Service metadata: name: my-app-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancer -
NodePort ծառայություն:
// service-nodeport.yaml apiVersion: v1 kind: Service metadata: name: my-app-service-np spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 nodePort: 30000 # ընտրովի, Kubernetes-ը կպատկացնի, եթե նշված չէ type: NodePort -
Ingress (ClusterIP ծառայություն):
// service-clusterip.yaml (առկա է) apiVersion: v1 kind: Service metadata: name: my-app-service-ci spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: ClusterIP// ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-app-ingress spec: rules: - host: myapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: my-app-service-ci port: number: 80
Ընտրությունը կախված է պահանջներից՝ մասշտաբայնություն, անվտանգություն, տեղակայման միջավայր (ք cloud կամ on-premise) և կենտրոնական մուտքի կառավարման անհրաժեշտությունից: Ingress-ը նախընտրելի լուծում է արտադրական համակարգերի համար։