הגדרת TLS ו-mTLS ב-Istio ingress

בנושא הזה מוסבר איך להפעיל TLS חד-כיווני ו-mTLS ב-Istio ingress.

הגדרת TLS חד-כיווני

משתמשים ב-TLS חד-כיווני כדי לאבטח נקודות קצה של proxy ל-API ב-Istio ingress. כדי להפעיל TLS חד-כיווני, צריך להגדיר את ה-ingress עם זוגות של אישורי TLS ומפתחות או עם Kubernetes Secret, כמו שמוסבר באפשרויות הבאות.

אפשרות 1: זוג מפתחות/אישורים

מספקים את קובצי המפתח והאישור של SSL במאפיין virtualhosts בקובץ ההחלפות:

virtualhosts:
  - name: $ENVIRONMENT_GROUP_NAME
    sslCertPath: "$CERT_FILE"
    sslKeyPath: "$KEY_FILE"

$ENVIRONMENT_GROUP_NAME הוא שם של קבוצת סביבות עם כינויי מארחים תואמים, ו-$CERT_FILE ו-$KEY_FILE הם קובצי מפתח ואישור TLS. איך יוצרים אישורי TLS

אפשרות 2: Kubernetes Secret

יוצרים Kubernetes Secret במרחב השמות istio-system ומוסיפים את שם ה-Secret לקובץ ההחלפות:

  1. יוצרים את הסוד:
    kubectl create -n istio-system secret generic $SECRET_NAME  \
    --from-file=key=$KEY_FILE \
    --from-file=cert=$CERT_FILE
  2. מגדירים את המאפיין virtualhosts בקובץ ההחלפות:
    virtualhosts:
      - name: $ENVIRONMENT_GROUP_NAME
        tlsMode: SIMPLE  # Note: SIMPLE is the default, so it is optional.
        sslSecret: $SECRET_NAME

הגדרת mTLS

במקום TLS חד-כיווני, אפשר להגדיר mTLS ב-Istio ingress. יש שתי אפשרויות להגדרת mTLS, כמו שמוסבר בהמשך.

אפשרות 1: זוג מפתח/אישור וקובץ רשות אישורים

מספקים אישור של רשות אישורים (CA) עם קובצי מפתח ואישור SSL במאפיין virtualhosts בקובץ ההחלפות:

virtualhosts:
  - name: $ENVIRONMENT_GROUP_NAME
    tlsMode: MUTUAL
    caCertPath: "$CA_FILE"
    sslCertPath: "$CERT_FILE"
    sslKeyPath: "$KEY_FILE"

כאשר $ENVIRONMENT_GROUP_NAME הוא השם של קבוצת סביבות עם כינויי מארח תואמים, $CA_FILE הוא אישור מורשה, ו-$CERT_FILE ו-$KEY_FILE הם קובצי מפתח ואישור TLS. איך יוצרים אישורי TLS

אפשרות 2: Kubernetes Secrets

יוצרים שני סודות של Kubernetes במרחב השמות istio-system. הסוד הראשון הוא לרשות האישורים והסוד השני הוא לזוג המפתח/אישור SSL. לאחר מכן, מוסיפים אותם לקובץ ההגדרות שמוגדרות מחדש.
  1. יוצרים שני סודות של Kubernetes במרחב השמות istio-system. הסוד הראשון הוא עבור רשות האישורים והסוד השני הוא עבור זוג המפתחות/אישורים של SSL:
    kubectl create -n istio-system secret generic $SECRET_NAME  \
    --from-file=key=$KEY_FILE \
    --from-file=cert=$CERT_FILE
  2. יוצרים סוד לרשות האישורים:
    kubectl create -n istio-system secret generic $SECRET_NAME-cacert  \
    --from-file=cacert=$CA_FILE
  3. מגדירים את המאפיין virtualhosts בקובץ ההחלפות:
    virtualhosts:
      - name: $ENVIRONMENT_GROUP_NAME
        tlsMode: MUTUAL  # Note: Be sure to specify MUTUAL
        sslSecret: $SECRET_NAME