Az Apache Superset internetre való elérhetővé helyezése

Fontos

This feature is currently in preview. A Microsoft Azure Előzetes verzió kiegészítő használati feltételei további jogi feltételeket tartalmaznak, amelyek a bétaverzióban, előzetes verzióban vagy egyébként még nem általánosan elérhető Azure-funkciókra vonatkoznak. Erről az adott előzetes verzióról az AKS-en futó HDInsight előzetes verziójában talál további információt. Ha kérdése vagy funkciójavaslata van, küldjön egy kérést az AskHDInsightban a részletekkel együtt, és kövessen minket további frissítésekért az Azure HDInsight-közösségről

Ez a cikk azt ismerteti, hogyan teheti elérhetővé az Apache Supersetet az interneten.

Bejövő forgalom konfigurálása

Az alábbi utasítások egy második hitelesítési réteget adnak hozzá Oauth engedélyezési proxy formájában az Oauth2Proxy használatával. Több védelmi réteget ad hozzá a Superset-hozzáféréshez.

  1. Szerezze be a gazdagépnévhez tartozó TLS-tanúsítványt, és helyezze el a Key Vaultba, és hívja meg aks-ingress-tls. Megtudhatja, hogyan helyezhet el tanúsítványt egy Azure Key Vaultban.

  2. Adja hozzá a következő titkos kulcsokat a Key Vaulthoz.

    Titkos kód neve Leírás
    ügyfél-azonosító Az Azure szolgáltatásnév ügyfél-azonosítója. Az Oauth-proxy megköveteli, hogy az azonosító titkos legyen.
    oauth2proxy-redis-password Proxygyorsítótár jelszava. Az Oauth-proxy által a Kubernetes háttérbeli Redis üzembehelyezési példányának eléréséhez használt jelszó. Erős jelszó létrehozása.
    oauth2proxy-cookie-secret Cookie-titkos kód, amely a cookie-adatok titkosítására szolgál. Ennek a cookie-titkos kódnak 32 karakter hosszúnak kell lennie.
  3. Vegye fel ezeket a visszahívásokat a Microsoft Entra alkalmazáskonfigurációjába.

    • https://{{YOUR_HOST_NAME}}/oauth2/callback
      • Oauth2 proxy esetén
    • https://{{YOUR_HOST_NAME}}/oauth-authorized/azure
      • superset esetén
  4. Helyezze üzembe az alapszintű bejövő ngninx-vezérlőt a default névtérben. További információt itt talál.

Megjegyzés:

A bejövő nginx-vezérlő lépései a Kubernetes-névteret ingress-basichasználják. Módosítsa a névteret default . például: NAMESPACE=default

  1. TLS titkos szolgáltatói osztály létrehozása.

    Ez a lépés azt ismerteti, hogy a TLS-tanúsítvány hogyan olvasható be a Key Vaultból, és hogyan alakítható át Kubernetes-titkos kódmá, amelyet a bejövő forgalom használ:

    Frissítsen a következő yaml-ben:

    • {{MSI_CLIENT_ID}} - A Superset-fürthöz$MANAGED_IDENTITY_RESOURCE () hozzárendelt felügyelt identitás ügyfélazonosítója.
    • {{KEY_VAULT_NAME}} - A titkos kulcsokat tartalmazó Azure Key Vault neve.
    • {{KEY_VAULT_TENANT_ID}} – Annak az Azure-bérlőnek az azonosító guidja, ahol a Key Vault található.

    tls-secretprovider.yaml

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-tls
    spec:
      provider: azure
      # secretObjects defines the desired state of synced K8s secret objects
      secretObjects:
      - secretName: ingress-tls-csi
        type: kubernetes.io/tls
        data: 
        - objectName: aks-ingress-tls
          key: tls.key
        - objectName: aks-ingress-tls
          key: tls.crt
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"
        userAssignedIdentityID: "{{MSI_CLIENT_ID}}"
        # the name of the AKV instance
        keyvaultName: "{{KEY_VAULT_NAME}}"
        objects: |
          array:
            - |
              objectName: aks-ingress-tls
              objectType: secret
        # the tenant ID of the AKV instance
        tenantId: "{{KEY_VAULT_TENANT_ID}}"
    
  2. OauthProxy titkos szolgáltatói osztály létrehozása.

    Frissítsen a következő yaml-ben:

    • {{MSI_CLIENT_ID}} - A Superset-fürthöz$MANAGED_IDENTITY_RESOURCE () hozzárendelt felügyelt identitás ügyfélazonosítója.
    • {{KEY_VAULT_NAME}} - A titkos kulcsokat tartalmazó Azure Key Vault neve.
    • {{KEY_VAULT_TENANT_ID}} - Annak az Azure-bérlőnek az azonosító guidja, ahol a kulcstartó található.

    Tekintse meg a mintakódot.

  3. Konfigurálás létrehozása az Oauth-proxyhoz.

    Frissítsen a következő yaml-ben:

    • {{hostname}} - Az internetre néző gazdagép neve.
    • {{tenant-id}} – Annak az Azure-bérlőnek az azonosító guidja, ahol a szolgáltatásnév létre lett hozva.

    Nem kötelező: frissítse a email_domains listát. Example: email_domains = [ "microsoft.com" ]

    Tekintse meg a mintakódot.

  4. Oauth-proxyerőforrások üzembe helyezése.

    kubectl apply -f oauth2-secretprovider.yaml
    kubectl apply -f tls-secretprovider.yaml
    helm repo add oauth2-proxy https://oauth2-proxy.github.io/manifests
    helm repo update
    helm upgrade --install --values oauth2-values.yaml oauth2 oauth2-proxy/oauth2-proxy
    
  5. Ha azure-altartományt használ, superset.<region>.cloudapp.azure.comakkor frissítse a DNS-címkét a társított nyilvános IP-címen.

    1. Nyissa meg a Superset Kubernetes-fürtöt az Azure Portalon.

    2. A bal oldali navigációs sávon válassza a "Tulajdonságok" lehetőséget.

    3. Nyissa meg az "Infrastruktúra-erőforráscsoport" hivatkozást.

    4. Keresse meg a nyilvános IP-címet a következő címkékkel:

      {
        "k8s-azure-cluster-name": "kubernetes",
        "k8s-azure-service": "default/ingress-nginx-controller"
      }
      
    5. Válassza a "Konfiguráció" lehetőséget a nyilvános IP-cím bal oldali navigációs sávjáról.

    6. Adja meg a DNS-név címkéjét.

  6. Ellenőrizze, hogy konfigurálva van-e az Oauth-bejövő forgalom.

    Futtassa kubectl get ingress a létrehozott bejövő forgalom megtekintését. Meg kell jelennie a EXTERNAL-IP bejövő forgalomhoz társítottnak. Hasonlóképpen, a futtatáskor kubectl get services látnia kell, hogy a ingress-nginx-controller rendszer hozzárendelt egy EXTERNAL-IP. Megnyithatja http://<hostname>/oauth2 az Oauth tesztelését.

  7. Adjon meg egy bejövő forgalmat az Oauth és a Superset összekapcsolásához. Ez a lépés azt eredményezi, hogy az elérési utakra irányuló hívásokat először átirányítják az /oauth webhelyre engedélyezés céljából, majd sikeresség esetén engedélyezik a Superset szolgáltatás elérését.

    Frissítsen a következő yaml-ben:

    • {{hostname}} - Az internetre néző gazdagép neve.

    ingress.yaml

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/auth-signin: https://$host/oauth2/start?rd=$escaped_request_uri
        nginx.ingress.kubernetes.io/auth-url: http://oauth2-oauth2-proxy.default.svc.cluster.local:80/oauth2/auth
        nginx.ingress.kubernetes.io/proxy-buffer-size: 64k
        nginx.ingress.kubernetes.io/proxy-buffers-number: "8"
        nginx.ingress.kubernetes.io/rewrite-target: /$1
      generation: 1
      labels:
        app.kubernetes.io/name: azure-trino-superset
      name: azure-trino-superset
      namespace: default
    spec:
      rules:
      - host: "{{hostname}}"
        http:
          paths:
          - backend:
              service:
                name: superset
                port:
                  number: 8088
            path: /(.*)
            pathType: Prefix
      tls:
      - hosts:
        - "{{hostname}}"
        secretName: ingress-tls-csi
    
  8. Telepítse a bejövő forgalmat.

          kubectl apply -f ingress.yaml
    
  9. Test.

    Nyissa meg https://{{hostname}}/ a böngészőben.

Bejövő forgalom hibaelhárítása

Tipp.

A bejövő forgalom üzembe helyezésének alaphelyzetbe állításához hajtsa végre a következő parancsokat:

kubectl delete secret ingress-tls-csi
kubectl delete secret oauth2-secret
helm uninstall oauth2-proxy
helm uninstall ingress-nginx
kubectl delete ingress azure-trino-superset

Az erőforrások törlése után az elejétől újra kell indítania ezeket az utasításokat.

Érvénytelen biztonsági tanúsítvány: A Kubernetes bejövőforgalom-vezérlő hamis tanúsítványa

Ez a probléma TLS-tanúsítvány-ellenőrzési hibát okoz a böngészőben/ügyfélben. A hiba megtekintéséhez vizsgálja meg a tanúsítványt egy böngészőben.

A probléma szokásos oka az, hogy a tanúsítvány helytelenül van konfigurálva:

  • Ellenőrizze, hogy látható-e a tanúsítvány a Kubernetesben: kubectl get secret ingress-tls-csi --output yaml

  • Ellenőrizze, hogy a CN megfelel-e a tanúsítványban megadott CN-nek.

    • A CN-eltérés a bejövő podon lesz naplózva. Ezek a naplók a futtatással kubectl logs <ingress pod>tekinthetők meg. A naplókban a következő hiba jelenik meg:

      SSL certificate "default/ingress-tls-csi" does not contain a Common Name or Subject Alternative Name for server "{server name}": x509: certificate is valid for {invalid hostname}, not {actual hostname}

404 / nginx

Az Nginx nem találja a mögöttes szolgáltatást. Győződjön meg arról, hogy a Superset telepítve van: kubectl get services

503 Szolgáltatás átmenetileg nem érhető el / nginx

A szolgáltatás fut, de nem érhető el. Ellenőrizze a szolgáltatásportok számát és a szolgáltatás nevét.