Sobes.tech
Middle

Кубернетес контейнерине сырткы тармактан кандайча кире алсак болот?

sobes.tech AI

AIден жооп

Кубернетес контейнерине сырттан кирүү үчүн негизги бир нече жол бар:

  1. LoadBalancer түрүндөгү кызмат:

    • Булут камсыздоочулар (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. Pod'да NodePort/HostPort аркылуу түз кирүү:

    • hostPort көрсөтө аласыз, 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
    

Метод тандоо масштабдоо, коопсуздук, жайгаштыруу чөйрөсү (булут же on-premise) жана борборлоштурулган кирүү башкаруу талаптарына жараша болот. Ingress — өндүрүш системдери үчүн эң жакшы чечим.