הגדרת שרת Proxy של DNS

DNS Proxy היא תכונה שמספקת את היכולות הבאות:

  1. הפצת רשומות DNS של Services באשכולות בהגדרה מרובת אשכולות.
  2. מאכלסים את רשומות ה-DNS של ServiceEntry.

‫Kubernetes מספק פענוח DNS רק ל-Services באשכול המקומי. כשצריך לספק רזולוציית שמות עבור Services באשכולות מרוחקים או להשתמש בשם מארח פנימי בלבד עם ServiceEntry בלי שיהיה שרת DNS פנימי נוסף, DNS Proxy מספק דרך לפתור שמות DNS במקרים כאלה.

הגדרת שרת Proxy של DNS

הגדרה של האשכול כולו

כדי להגדיר שרת proxy של DNS באשכול, מוסיפים ISTIO_META_DNS_CAPTURE proxy metadata אל ConfigMap עבור MeshConfig. השם של ConfigMap הוא בפורמט istio-<revision_name>. פרטים על השינוי מופיעים בסקירה הכללית של השינוי

apiVersion: v1
data:
  mesh: |-
    ...
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: "true"        
    ...
kind: ConfigMap
metadata:
  name: istio-<revision_name>
  namespace: istio-system

הגדרות לכל שרת proxy

כדי להגדיר שרת proxy של DNS לשרת proxy, מוסיפים את הערת ISTIO_META_DNS_CAPTURE proxy metadata באופן הבא:

kind: Deployment
metadata:
  name: app1
  namespace: ns1
spec:
...
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          proxyMetadata:
            ISTIO_META_DNS_CAPTURE: "true"
...

מוודא

רזולוציית שם עבור Service באשכולות

אחרי ההגדרה של ריבוי אשכולות, צריך לפרוס Service רק באחד מהאשכולות כדי לאמת את פתרון השם בין האשכולות.

אם יש לכם את הדוגמה הבאה Service ns1/svc1, תוכלו למצוא את ClusterIP ב-Service.

$ kubectl get -n ns1 svc1
kind: Service
metadata:
  name: svc1
  namespace: ns1
spec:
...
  ClusterIP: 210.200.1.1
...

אחר כך, כשמשתמשים ב-curl מהאשכול other כדי להגיע אל Service, צריך להציג את ClusterIP באופן הבא.

curl -sS -v svc1.ns1.svc.cluster.local
*   Trying 210.200.1.1:80...

רזולוציית שם עבור ServiceEntry

מוסיפים ServiceEntry עם שם מארח שלא רשום ב-DNS. כדי לאמת את תרגום השם לכתובת, בדוגמה הבאה יש כתובת מפורשת 192.168.123.123.

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: test-service-entry
spec:
  addresses:
  - "192.168.123.123"
  hosts:
  - not-existing-hostname.internal
  ports:
  - name: http
    number: 80
    protocol: HTTP
EOF

לאחר מכן, מנסים רזולוציית DNS ב-Pod שבו מופעל DNS Proxy. לדוגמה, אם מריצים curl ב-Pod, כתובת ה-IP תוצג כך:

curl -sS -v not-existing-hostname.internal
*   Trying 192.168.123.123:80...