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

במאמר הזה מוסבר איך להגדיר 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 לפריסה. אפשר ליצור Classic ELB או Network ELB ברשת המשנה הציבורית או הפרטית. צריך לבחור אחת מהאפשרויות האלה:

    • ‫Classic ELB בתת-רשת ציבורית
    • מאזן עומסים ברשת המשנה הציבורית
    • ‫Classic ELB בתת-רשת פרטית
    • מאזן עומסים ברשת המשנה הפרטית

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

    Classic Public

    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
    

    Classic Private

    יוצרים 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

פתרון בעיות

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

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