التعليقات التوضيحية لوحدة تحكم الدخول لبوابة التطبيق

المقدمات

يمكن أن يكون مورد Kubernetes Ingress مشروحًا بأزواج مفاتيح/قيم عشوائية. تعتمد AGIC على التعليقات التوضيحية لبرنامج ميزات بوابة التطبيق، والتي لا يمكن تكوينها عبر Ingress YAML. يتم تطبيق التعليقات التوضيحية Ingress على كافة إعدادات HTTP وتجمعات الخلفية والمستمعين المستمدة من مورد دخول.

قائمة التعليقات التوضيحية المدعومة

لكي تتم مراقبة مورد Ingress من قِبل AGIC، يجب أن يكون مشروحًا بـ kubernetes.io/ingress.class: azure/application-gateway. وعندئذ فقط ستعمل AGIC مع مورد Ingress المطلوب.

التعليق التوضيحي نوع القيمة القيمة الافتراضية القيم المسموح بها
appgw.ingress.kubernetes.io/backend-path-prefix string nil
appgw.ingress.kubernetes.io/ssl-redirect bool false
appgw.ingress.kubernetes.io/connection-draining bool false
appgw.ingress.kubernetes.io/connection-draining-timeout int32(ثوانٍ) 30
appgw.ingress.kubernetes.io/cookie-based-affinity bool false
appgw.ingress.kubernetes.io/request-timeout int32(ثوانٍ) 30
appgw.ingress.kubernetes.io/use-private-ip bool false
appgw.ingress.kubernetes.io/backend-protocol string http http, https
appgw.ingress.kubernetes.io/rewrite-rule-set string nil

بادئة المسار الخلفي

يسمح هذا التعليق التوضيحي للمسار الخلفي المحدد في مورد ingress بإعادة كتابة مع بادئة المحدد في هذا التعليق التوضيحي. يسمح هذا للمستخدمين بكشف الخدمات التي فيها نقاط النهاية الخاصة بها مختلفة عن أسماء نقاط النهاية المستخدمة في الكشف عن خدمة في مورد دخول.

الاستخدام

appgw.ingress.kubernetes.io/backend-path-prefix: <path prefix>

مثال

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: go-server-ingress-bkprefix
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/backend-path-prefix: "/test/"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          serviceName: go-server-service
          servicePort: 80

في المثال أعلاه، قمنا بتعريف مورد دخول اسمه go-server-ingress-bkprefix مع تعليق توضيحي appgw.ingress.kubernetes.io/backend-path-prefix: "/test/" . يخبر التعليق التوضيحي بوابة التطبيق بإنشاء إعداد HTTP، والذي سيكون له تجاوز بادئة مسار للمسار /hello إلى /test/.

ملاحظة

في المثال أعلاه لدينا قاعدة واحدة فقط محددة. ومع ذلك، التعليقات التوضيحية قابلة للتطبيق على المورد ingress بأكمله، لذلك إذا كان المستخدم قد عرف قواعد متعددة، سيتم إعداد بادئة المسار الخلفي لكل مسار من المسارات المحددة. وبالتالي، إذا أراد مستخدم قواعد مختلفة مع بادئات مسار مختلفة (حتى لنفس الخدمة) سيحتاج إلى تعريف موارد دخول مختلفة.

TLS إعادة توجيه

بوابة التطبيقيمكن تكوينهالإعادة توجيه عناوين URL HTTP تلقائيًا إلى نظرائهم HTTPS. عند وجود هذا التعليق التوضيحي وتكوين TLS بشكل صحيح، ستقوم وحدة تحكم Kubernetes Ingress بإنشاء قاعدة التحويل مع تكوين إعادة توجيه وتطبيق التغييرات على "بوابة التطبيق". ستكون إعادة التوجيه التي تم إنشاؤها HTTP 301 Moved Permanently.

الاستخدام

appgw.ingress.kubernetes.io/ssl-redirect: "true"

مثال

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: go-server-ingress-redirect
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
   - hosts:
     - www.contoso.com
     secretName: testsecret-tls
  rules:
  - host: www.contoso.com
    http:
      paths:
      - backend:
          serviceName: websocket-repeater
          servicePort: 80

استنزاف الاتصال

connection-drainingيسمح هذا التعليق التوضيحي للمستخدمين بتحديد ما إذا كان يتم تمكين استنزاف الاتصال. connection-draining-timeout: يسمح هذا التعليق التوضيحي للمستخدمين بتحديد مهلة بعدها ستقوم بوابة التطبيق بإنهاء الطلبات إلى نقطة النهاية الخلفية المستنزفة.

الاستخدام

appgw.ingress.kubernetes.io/connection-draining: "true"
appgw.ingress.kubernetes.io/connection-draining-timeout: "60"

مثال

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: go-server-ingress-drain
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/connection-draining: "true"
    appgw.ingress.kubernetes.io/connection-draining-timeout: "60"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          serviceName: go-server-service
          servicePort: 80

يسمح هذا التعليق التوضيحي بتحديد ما إذا كان يتم تمكين التقارب المستند إلى ملف تعريف الارتباط.

الاستخدام

appgw.ingress.kubernetes.io/cookie-based-affinity: "true"

مثال

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: go-server-ingress-affinity
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/cookie-based-affinity: "true"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          serviceName: go-server-service
          servicePort: 80

مهلة الطلب

يسمح هذا التعليق التوضيحي لتحديد مهلة الطلب في ثوانٍ، بعد ذلك بوابة التطبيق سوف تفشل الطلب إذا لم يتم تلقي الاستجابة.

الاستخدام

appgw.ingress.kubernetes.io/request-timeout: "20"

مثال

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: go-server-ingress-timeout
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/request-timeout: "20"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          serviceName: go-server-service
          servicePort: 80

استخدام IP خاص

يسمح لنا هذا التعليق التوضيحي بتحديد ما إذا كان يتم عرض نقطة النهاية هذه على IP الخاص لبوابة التطبيق.

ملاحظة

  • لا تعتمد بوابة التطبيق عدة IPs على نفس المنفذ (مثال: 80/443). الدخول مع التعليق التوضيحي appgw.ingress.kubernetes.io/use-private-ip: "false" وآخر معappgw.ingress.kubernetes.io/use-private-ip: "true"على HTTPسيؤدي إلى فشل AGIC في تحديث بوابة التطبيق.
  • لبوابة التطبيق التي لا تحتوي على IP خاص، سيتم تجاهل مع Ingresses appgw.ingress.kubernetes.io/use-private-ip: "true". وهذا ينعكس في سجلات وحدة التحكم وأحداث دخول لتلك resses مع NoPrivateIP تحذير.

الاستخدام

appgw.ingress.kubernetes.io/use-private-ip: "true"

مثال

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: go-server-ingress-timeout
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/use-private-ip: "true"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          serviceName: go-server-service
          servicePort: 80

بروتوكول الواجهة الخلفية

يسمح لنا هذا التعليق التوضيحي بتحديد البروتوكول الذي يجب أن تستخدمه بوابة التطبيق في أثناء التحدث إلى Pods. البروتوكولات المعتمدة: http,https

ملاحظة

  • بينما يتم اعتماد الشهادات الموقعة ذاتيًا على "بوابة التطبيق"، حاليًا، تدعم AGIC فقط https عندما تستخدم Pods شهادة موقعة من قِبل مرجع مصدق معروف.
  • تأكد من عدم استخدام المنفذ 80 مع HTTPS والمنفذ 443 مع HTTP على Pods.

الاستخدام

appgw.ingress.kubernetes.io/backend-protocol: "https"

مثال

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: go-server-ingress-timeout
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/backend-protocol: "https"
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          serviceName: go-server-service
          servicePort: 443

إعادة كتابة مجموعة القواعد

يسمح لك هذا التعليق التوضيحي بتعيين قاعدة إعادة كتابة موجودة تم تعيينها إلى قاعدة توجيه الطلب المقابلة.

الاستخدام

appgw.ingress.kubernetes.io/rewrite-rule-set: <rewrite rule set name>

مثال

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: go-server-ingress-bkprefix
  namespace: test-ag
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/rewrite-rule-set: add-custom-response-header
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: go-server-service
            port:
              number: 8080