Sobes.tech
Middle

Ինչպե՞ս կարող ենք մուտք գործել Kubernetes կոնտեյներին, որտեղ աշխատում է հավելվածը, արտաքին ցանցից:

sobes.tech AI

Պատասխան AI-ից

Կան մի քանի հիմնական եղանակներ՝ ինչպես հասնել Kubernetes կոնտեյների, արտաքին ցանցից:

  1. LoadBalancer տեսակի ծառայություն:

    • Cloud մատակարարները (AWS, GCP, Azure) ստեղծում են արտաքին բեռի հավասարակշռիչ, որը ուղղորդում է տրաֆիկը ձեր հավելվածի պոդերին:
    • Նշվում է արտաքին IP հասցե:
    • Ամենահեշտ միջոցը облаկային միջավայրում:
  2. NodePort տեսակի ծառայություն:

    • Բացում է պորտը յուրաքանչյուր հանգույցում:
    • Այս պորտը ուղղորդում է տրաֆիկը ձեր հավելվածի ծառայությանը:
    • Հասանելի է ցանկացած հանգույցի IP հասցեով և NodePort համարով:
    • Ավելի քիչ մասշտաբային և անվտանգ, քան LoadBalancer:
  3. ClusterIP տեսակի ծառայություն և Ingress միասին:

    • ClusterIP՝ միայն ներսում հասանելի:
    • Ingress՝ API օբյեկտ, որը կառավարում է արտաքին մուտքը ծառայությունների:
    • Ingress վերահսկիչը (օրինակ՝ Nginx Ingress Controller, Traefik) լսում է արտաքին տրաֆիկը և ուղղորդում այն համապատասխան ClusterIP ծառայությանը:
    • Կենտրոնական կառավարում՝ երթևեկության, SSL-տերմինացման, բեռի հավասարակշռման:
    • Գնահատելի և մասշտաբային մոտեցում:
  4. ExternalName տեսակի ծառայություն:

    • Ստեղծում է արտաքին դոմենի псևդոնիմ:
    • Չպատասխանատու է կոնտեյների ուղիղ մուտքի համար, բայց թույլ է տալիս օգտագործել DNS անունը ներսում՝ արտաքին ռեսուրսին հասնելու համար:
    • Չի հարմար՝ կոնտեյների ուղիղ մուտքի համար՝ դուրս:
  5. Ուղիղ մուտք 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-ը նախընտրելի լուծում է արտադրական համակարգերի համար։