חשיפת שער כניסה באמצעות מאזן עומסים חיצוני
סקירה כללית
באמצעות Cloud Service Mesh אפשר לפרוס ולנהל שערים של תעבורת נכנסת כחלק מ-Service Mesh. אפשר להגדיר איזון עומסים נוסף לאשכול באמצעות Cloud Service Mesh, על ידי שימוש במאזני עומסים חיצוניים (מאזני עומסים פיזיים או מאזני עומסים מבוססי תוכנה מחוץ לאשכול) כדי לשלוח תעבורה לשער הכניסה.
בדף הזה מוסבר איך להגדיר מאזן עומסים חיצוני באמצעות Cloud Service Mesh. אפשרות אחרת היא להגדיר כניסה עם כמה הגדרות של קצה עורפי.
לפני שמתחילים
כדי לבצע את השלבים במאמר הזה, אתם צריכים את המשאבים הבאים:
אשכול Kubernetes שמותקן בו Cloud Service Mesh.
מאזן עומסים חיצוני שיכול לגשת לצמתים שבהם האשכול פועל. תגדירו את מאזן העומסים החיצוני הזה כך שיפעל מול שער הכניסה (ingress) של האשכול באמצעות
External IP Address.
מגדירים את הסביבה
מריצים את הפקודות הבאות מתחנת עבודה שיש לה גישה לאשכול שרוצים להשתמש בו. חשוב לוודא שהכלי kubectl מוגדר לשימוש בהקשר של האשכול שספציפי לאשכול שלכם.
מגדירים את משתני הסביבה.
export ASM_INGRESSGATEWAY_NAMESPACE=asm-ingressgateway export ASM_INGRESSGATEWAY_DEPLOYMENT_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_SERVICE_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_NODE_LABEL=asm-ingressgatewayמגדירים את
IP addressשל מאזן העומסים החיצוני.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS[אופציונלי] מתייגים את הצמתים של שער הכניסה. כך מוודאים שהשער יופעל בצמתים ספציפיים באשכול.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=- INGRESSGATEWAY_NODE_IP: הצמתים באשכול Kubernetes שמארחים את שער הכניסה. מריצים את הפקודה
kubectlלכל צומת כניסה שיש לכם.
- INGRESSGATEWAY_NODE_IP: הצמתים באשכול Kubernetes שמארחים את שער הכניסה. מריצים את הפקודה
יצירת שער הכניסה
יוצרים את מרחב השמות. מרחב השמות הזה ישמש לפריסת שער הכניסה (ingress).
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}מפעילים את מרחב השמות להחדרה. השלבים משתנים בהתאם לסוג Cloud Service Mesh (מנוהל או בתוך האשכול).
מנוהל
כדי לאתר את ערוצי ההפצה הזמינים, משתמשים בפקודה הבאה:
kubectl -n istio-system get controlplanerevisionהפלט אמור להיראות כך:
NAME AGE asm-managed 6d7h asm-managed-rapid 6d7hבפלט, הערך בעמודה
NAMEהוא תווית הגרסה שתואמת לערוץ ההפצה שזמין לגרסה של Cloud Service Mesh.החלת תווית הגרסה על מרחב השמות:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
באשכול
משתמשים בפקודה הבאה כדי לאתר את תווית הגרסה ב-
istiod:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'מחילים את תווית הגרסה על מרחב השמות. בפקודה הבאה,
REVISIONהוא הערך של התוויתistiodrevision שרשמתם בשלב הקודם.kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION --overwrite
מחילים את קובץ המניפסט של שער הכניסה.
kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} apply --filename https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/ingress-gateway-external-lb/ingress-gateway.yamlהפלט אמור להיראות כך:
serviceaccount/asm-ingressgateway created role.rbac.authorization.k8s.io/asm-ingressgateway created rolebinding.rbac.authorization.k8s.io/asm-ingressgateway created deployment.apps/asm-ingressgateway created service/asm-ingressgateway created poddisruptionbudget.policy/asm-ingressgateway created horizontalpodautoscaler.autoscaling/asm-ingressgateway createdמבצעים תיקון (patch) בשירות
ingressgatewayבאמצעות כתובת ה-IP של מאזן העומסים החיצוני.cat <<EOF > asm-external-ip-patch.yaml spec: externalIPs: - ${EXTERNAL_LB_IP_ADDRESS} loadBalancerIP: ${EXTERNAL_LB_IP_ADDRESS} EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --patch "$(cat asm-external-ip-patch.yaml)"[Optional] תיקון הפריסה של
ingressgatewayבשביל שיוך תוויות לצמתי שער הכניסה.cat <<EOF > asm-ingress-node-label-patch.yaml spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ${ASM_INGRESSGATEWAY_NODE_LABEL} operator: Exists EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch deployment/${ASM_INGRESSGATEWAY_DEPLOYMENT_NAME} --patch "$(cat asm-ingress-node-label-patch.yaml)"
הגדרת מאזן עומסים חיצוני
בקטע הזה נגדיר את מאזן העומסים החיצוני כדי להתחבר לשער הכניסה מהאשכול.
שליפת פרטי היציאה של שער הכניסה Service
קבלת
NodePorts.export HTTP_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') export HTTPS_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="https")].nodePort}') export STATUS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="status-port")].nodePort}')להציג את
NodePorts.echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
הגדרת מאזן העומסים החיצוני
משתמשים ב-NodePorts שמוצג בשלב הקודם כדי להגדיר קישוריות בין מאזן העומסים החיצוני לבין שער הכניסה.
מגדירים את בדיקת התקינות בהגדרות של מאזן העומסים.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/readyCLUSTER_NODE_IP: כתובת ה-IP של הצמתים באשכול Kubernetes שמארח את שער הכניסה. צריך להיות אפשר להגיע לכתובת ה-IP הזו ממאזן העומסים החיצוני. יכול להיות שתצטרכו להגדיר את ההגדרה הזו כמה פעמים, פעם אחת לכל צומת באשכול.
STATUS_PORT: הוא
NodePortשדרכו נחשף ה-API של סטטוס התקינות של שער הכניסה. אפשר להעתיק את המידע הזה מהשלב הקודם. הערך יהיה זהה לכל צומת באשכול.
מגדירים מאגרי צמתים במאזן העומסים לניתוב תנועה של
HTTPו-HTTPS. משתמשים בהגדרה הבאהIP:PORTלתנועה ביציאה 80 (HTTP) וביציאה 443 (HTTPS).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORTCLUSTER_NODE_IP: כתובת ה-IP של הצמתים באשכול Kubernetes שמארח את שער הכניסה. צריך להיות אפשר להגיע לכתובת ה-IP הזו ממאזן העומסים החיצוני. יכול להיות שתצטרכו להגדיר את ההגדרה הזו כמה פעמים, פעם אחת לכל צומת באשכול.
HTTP_INGRESS_PORT: הוא
NodePortשדרכו נחשפת תנועת ה-HTTP של שער הכניסה. אפשר להעתיק את המידע הזה מהשלב הקודם. הערך יהיה זהה לכל צומת באשכול.HTTPS_INGRESS_PORT: הוא
NodePortשדרכו נחשפת תנועת ה-HTTPS של שער הכניסה. אפשר להעתיק את המידע הזה מהשלב הקודם. הערך יהיה זהה לכל צומת באשכול.
כדי לוודא שההגדרה תקינה, צריך לוודא שבדיקות התקינות במאזן העומסים עוברות.