יצירת מאזן עומסים

במאמר הזה נסביר איך להגדיר AWS Elastic Load Balancer ‏ (ELB) עם GKE ב-AWS.

כשיוצרים שירות מסוג LoadBalancer, בקר GKE ב-AWS מגדיר Classic או Network ELB ב-AWS.

אפשר גם לעיין במדריך לתחילת העבודה כדי ליצור Classic ELB שפונה כלפי חוץ ממסוף Google Cloud או ליצור מאזן עומסים (ALB) של אפליקציות AWS.

לפני שמתחילים

לפני שמתחילים להשתמש ב-GKE on AWS, חשוב לוודא שביצעתם את המשימות הבאות:

  • מתקינים שירות ניהול.
  • יוצרים אשכול משתמשים.
  • בספריית anthos-aws, משתמשים ב-anthos-gke כדי להחליף הקשר לאשכול המשתמשים.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    מחליפים את CLUSTER_NAME בשם אשכול המשתמש.
  • כלי שורת הפקודה curl או כלי דומה מותקן.

בחירת מאזן עומסים חיצוני או פנימי

‫GKE on AWS יוצר מאזן עומסים חיצוני (ברשת המשנה הציבורית) או פנימי (ברשת המשנה הפרטית) בהתאם להערה למשאב LoadBalancer.

אם בוחרים מאזן עומסים חיצוני, אפשר לגשת אליו באמצעות כתובות ה-IP שמותרות בקבוצות האבטחה של מאגר הצמתים וברשימות בקרת הגישה לרשת (ACL) של רשת המשנה.

בחירת סוג מאזן עומסים

בוחרים אם רוצים ליצור מאזן עומסים קלאסי (Classic ELB) או מאזן עומסי רשת (NLB). מידע נוסף על ההבדלים בין סוגי מאזני העומסים זמין במאמר Load balancer types (סוגי מאזני עומסים) בתיעוד של AWS.

יצירת LoadBalancer

כדי ליצור מאזן עומסים, יוצרים פריסה וחושפים אותה באמצעות שירות.

  1. יוצרים את הפריסה. קונטיינרים בפריסה הזו מאזינים ליציאה 50001. שומרים את קובץ ה-YAML הבא בקובץ בשם my-deployment-50001.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment-50001
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
            env:
            - name: "PORT"
              value: "50001"
    
  2. יוצרים את הפריסה באמצעות kubectl apply:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-deployment-50001.yaml
    
  3. מוודאים ששלושה פודים פועלים:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    
  4. יוצרים שירות מסוג LoadBalancer לפריסה. אפשר ליצור ELB קלאסי או ELB של רשת ברשת המשנה הציבורית או הפרטית. צריך לבחור אחת מהאפשרויות האלה:

    • ‫Classic ELB בתת-הרשת הציבורית
    • An NLB on the public subnet
    • מאזן עומסים קלאסי של ELB ברשת המשנה הפרטית
    • מאזן עומסים של רשת (NLB) ברשת המשנה הפרטית

    לאחר מכן, מעתיקים את המניפסט הבא לקובץ בשם my-lb-service.yaml.

    גלויה לכולם

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    NLB Public

    כדי ליצור NLB, מגדירים את ההערה service.beta.kubernetes.io/aws-load-balancer-type לערך nlb. קובץ ה-YAML הבא כולל את ההערה הזו.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    פרטיות קלאסית

    יוצרים LoadBalancer פרטי על ידי הגדרת ההערה service.beta.kubernetes.io/aws-load-balancer-internal לערך "true". קובץ ה-YAML הבא כולל את ההערה הזו.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    NLB Private

    כדי ליצור NLB פרטי, מגדירים את ההערות הבאות:

    • service.beta.kubernetes.io/aws-load-balancer-internal עד "true"
    • service.beta.kubernetes.io/aws-load-balancer-type עד nlb

    קובץ ה-YAML הבא כולל את שתי ההערות.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    
  5. יוצרים את השירות באמצעות kubectl apply:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-lb-service.yaml
    
  6. מציגים את שם המארח של השירות באמצעות kubectl get service.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get service my-lb-service \
      --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
    

    הפלט אמור להיראות כך: elb-id.elb.aws-region.amazonaws.com

  7. אם יצרתם מאזן עומסים שפונה החוצה ויש לכם גישה לרשת המשנה הציבורית של ה-VPC, אתם יכולים להתחבר למאזן העומסים באמצעות curl. מחליפים את external-ip בכתובת ה-IP מהפלט של kubectl get service מהשלב הקודם.

    curl external-ip:60000
    

    הפלט אמור להיראות כך:

    Hello, world!
    Version: 2.0.0
    Hostname: my-deployment-50001-84b6dc5555-zmk7q
    

סידור וארגון

כדי להסיר את השירות והפריסה, משתמשים ב-kubectl delete.

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f my-lb-service.yaml

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f my-deployment-50001.yaml

פתרון בעיות

אם אין לכם גישה לנקודת קצה של מאזן עומסים, נסו לתייג את רשתות המשנה.

המאמרים הבאים