Sobes.tech
Middle

Tashqi tarmoqdan ilova ishga tushirilgan Kubernetes konteyneriga qanday kirish mumkin?

sobes.tech AI

AIdan javob

Kubernetes konteyneriga tashqi tarmoqdan kirish uchun bir nechta asosiy usullar mavjud:

  1. LoadBalancer turi xizmat:

    • Bulut provayderlari (AWS, GCP, Azure) tashqi yuk balanslovchi yaratadi va trafikni ilovangiz podlariga yo'naltiradi.
    • Tashqi IP manzil tayinlanadi.
    • Bulut muhitida eng oddiy usul.
  2. NodePort turi xizmat:

    • Klasterdagi har bir tugunida port ochadi.
    • Bu port trafikni ilovangiz xizmatiga yo'naltiradi.
    • Har qanday tugunning IP va NodePort raqami orqali kirish mumkin.
    • LoadBalancer ga qaraganda kamroq kengaytiriladigan va xavfsizroq.
  3. ClusterIP turi xizmat va Ingress bilan:

    • ClusterIP - faqat klaster ichida mavjud xizmat.
    • Ingress - klasterdagi xizmatlarga tashqi kirishni boshqaradigan API obyekti.
    • Ingress controller (masalan, Nginx Ingress Controller, Traefik) tashqi trafikni eshitadi va uni mos keladigan ClusterIP xizmatiga yo'naltiradi.
    • Yo'naltirish, SSL terminatsiya, yuk balansini boshqarish uchun markaziy boshqaruv imkonini beradi.
    • Moslashuvchan va kengaytiriladigan yondashuv.
  4. ExternalName turi xizmat:

    • tashqi domen uchun alias yaratadi. Bu xizmat orqali to'g'ridan-to'g'ri konteynerga kirish ta'minlamaydi, lekin klaster ichida DNS nomidan foydalanib tashqi resursga murojaat qilish imkonini beradi. Tashqaridan to'g'ridan-to'g'ri kirish uchun mos emas.
  5. Podda to'g'ridan-to'g'ri NodePort/HostPort kirish:

    • Pod spetsifikatsiyasida hostPort ni belgilash orqali pod ishga tushirilgan tugunda port ochish mumkin. Bu ishlab chiqarish muhitida tavsiya etilmaydi, kam boshqaruv va portlar to'qnashuvi ehtimoli bilan.
    • Shuningdek, nodePort NodePort turidagi xizmatda belgilanishi mumkin.

Konfiguratsiya misollari:

  • LoadBalancer turi xizmat:

    // 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 turi xizmat:

    // 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 # ixtiyoriy, Kubernetes belgilaydi agar ko'rsatilmasa
      type: NodePort
    
  • Ingress (ClusterIP xizmat uchun):

    // service-clusterip.yaml (oldindan mavjud deb hisoblanadi)
    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
    

Usul qilish usuli kengaytirilish, xavfsizlik, joylashuv muhitiga (bulut yoki on-premise) va markaziy kirish boshqaruvi ehtiyojlariga bog'liq. Ingress ishlab chiqarish tizimlari uchun afzalroq yechim hisoblanadi.