Megosztás a következőn keresztül:


Belső terheléselosztó használata az Azure Kubernetes Service-lel (AKS)

Létrehozhat és használhat belső terheléselosztót az alkalmazásokhoz való hozzáférés korlátozásához az Azure Kubernetes Service-ben (AKS). A belső terheléselosztó nem rendelkezik nyilvános IP-címvel, és a Kubernetes-szolgáltatást csak a privát IP-címet elérő alkalmazások számára teszi elérhetővé. Ezek az alkalmazások lehetnek ugyanazon a virtuális hálózaton belül vagy egy másik virtuális hálózatban virtuális hálózatok közötti társviszony-létesítésen keresztül. Ez a cikk bemutatja, hogyan hozhat létre és használhat belső terheléselosztót az AKS-sel.

Feljegyzés

Az Azure Load Balancer két termékváltozatban érhető el: Alapszintű és Standard. A standard termékváltozat alapértelmezés szerint AKS-fürt létrehozásakor használatos. A LoadBalancer szolgáltatástípus létrehozásakor ugyanazt a terheléselosztó-típust kapja, mint a fürt kiépítésekor. További információk: Azure Load Balancer-termékváltozatok összehasonlítása.

Mielőtt elkezdené

Hozzon létre egy belső terheléselosztót

  1. Hozzon létre egy szolgáltatásjegyzéket internal-lb.yaml a szolgáltatástípussal LoadBalancer és a azure-load-balancer-internal jegyzettel.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Helyezze üzembe a belső terheléselosztót a kubectl apply paranccsal. Ez a parancs létrehoz egy Azure-terheléselosztót az AKS-fürthöz csatlakoztatott csomópont erőforráscsoportjában.

    kubectl apply -f internal-lb.yaml
    
  3. A parancs használatával megtekintheti a kubectl get service szolgáltatás részleteit.

    kubectl get service internal-app
    

    A belső terheléselosztó IP-címe megjelenik az EXTERNAL-IP oszlopban, ahogyan az a következő példakimenetben is látható. Ebben az összefüggésben a Külső a terheléselosztó külső felületére utal. Ez nem jelenti azt, hogy nyilvános, külső IP-címet kap. Ez az IP-cím dinamikusan ugyanabból az alhálózatból van hozzárendelve, mint az AKS-fürt.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.248.59   10.240.0.7    80:30555/TCP   2m
    

IP-cím megadása

A terheléselosztó IP-címének megadásakor a megadott IP-címnek ugyanabban az alhálózatban kell lennie, mint az AKS-fürt, de az erőforráshoz még nem rendelhető hozzá. Például nem szabad IP-címet használnia az AKS-fürt Kubernetes-alhálózatához kijelölt tartományban.

Az Azure CLI-paranccsal vagy a Get-AzVirtualNetworkSubnetConfig PowerShell-parancsmaggal lekérheti az network vnet subnet list az alhálózatokat a virtuális hálózatban.

További információ az alhálózatokról: Csomópontkészlet hozzáadása egyedi alhálózattal.

Ha egy adott IP-címet szeretne használni a terheléselosztóval, két lehetősége van: állítsa be a szolgáltatásjegyzeteket , vagy adja hozzá a LoadBalancerIP tulajdonságot a terheléselosztó YAML-jegyzékéhez.

Fontos

A LoadBalancerIP tulajdonság hozzáadása a terheléselosztó YAML-jegyzékéhez elavult a felsőbb rétegbeli Kubernetes után. Bár a jelenlegi használat változatlan marad, és a meglévő szolgáltatások várhatóan módosítás nélkül fognak működni, javasoljuk inkább a szolgáltatásjegyzetek beállítását .

  1. Szolgáltatásjegyzeteket állíthat be egy IPv4-cím és service.beta.kubernetes.io/azure-load-balancer-ipv6 egy IPv6-cím használatávalservice.beta.kubernetes.io/azure-load-balancer-ipv4.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  1. A parancs használatával megtekintheti a kubectl get service szolgáltatás részleteit.

    kubectl get service internal-app
    

    Az oszlopban lévő EXTERNAL-IP IP-címnek tükröznie kell a megadott IP-címet, ahogyan az alábbi példakimenetben látható:

    NAME           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.184.168   10.240.0.25   80:30225/TCP   4m
    

A terheléselosztó másik alhálózatban való konfigurálásáról további információt a Másik alhálózat megadása című témakörben talál .

Mielőtt elkezdené

  • A Kubernetes 1.22.x vagy újabb verziójára van szüksége.
  • Szüksége van egy virtuális hálózattal és alhálózattal rendelkező meglévő erőforráscsoportra. Ebben az erőforráscsoportban hozza létre a privát végpontot. Ha nem rendelkezik ezekkel az erőforrásokkal, olvassa el a Virtuális hálózat és alhálózat létrehozása című témakört.
  1. Hozzon létre egy szolgáltatásjegyzéket internal-lb-pls.yaml a szolgáltatástípussal LoadBalancer és azure-pls-create a azure-load-balancer-internal széljegyzetekkel. További lehetőségekért tekintse meg az Azure Private Link Service-integráció tervezési dokumentumát.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
        service.beta.kubernetes.io/azure-pls-create: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Helyezze üzembe a belső terheléselosztót a kubectl apply paranccsal. Ez a parancs létrehoz egy Azure-terheléselosztót az AKS-fürthöz csatlakoztatott csomópont erőforráscsoportjában. Emellett létrehoz egy Private Link Service-objektumot is, amely a Kubernetes szolgáltatáshoz társított terheléselosztó előtérbeli IP-konfigurációjával csatlakozik.

    kubectl apply -f internal-lb-pls.yaml
    
  3. A parancs használatával megtekintheti a kubectl get service szolgáltatás részleteit.

    kubectl get service internal-app
    

    A belső terheléselosztó IP-címe megjelenik az EXTERNAL-IP oszlopban, ahogyan az a következő példakimenetben is látható. Ebben az összefüggésben a Külső a terheléselosztó külső felületére utal. Ez nem jelenti azt, hogy nyilvános, külső IP-címet kap.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.125.17.53  10.125.0.66   80:30430/TCP   64m
    
  4. Tekintse meg a Private Link Service objektum részleteit a az network private-link-service list paranccsal.

    # Create a variable for the node resource group
    
    AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
    
    # View the details of the Private Link Service object
    
    az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
    

    A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:

    Name      Alias
    --------  -------------------------------------------------------------------------
    pls-xyz   pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
    

A privát végpontokkal privát módon csatlakozhat a Kubernetes-szolgáltatásobjektumhoz a létrehozott Private Link szolgáltatáson keresztül.

  • Hozza létre a privát végpontot a az network private-endpoint create paranccsal.

    # Create a variable for the private link service
    
    AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv)
    
    # Create the private endpoint
    
    $ az network private-endpoint create \
        -g myOtherResourceGroup \
        --name myAKSServicePE \
        --vnet-name myOtherVNET \
        --subnet pe-subnet \
        --private-connection-resource-id $AKS_PLS_ID \
        --connection-name connectToMyK8sService
    

PLS-testreszabások jegyzetekkel

Az alábbiakban a PLS-erőforrás testreszabására használható széljegyzetek találhatók.

Jegyzet Érték Leírás Kötelező Alapértelmezett
service.beta.kubernetes.io/azure-pls-create "true" Logikai érték, amely azt jelzi, hogy létre kell-e hozni egy PLS-t. Szükséges
service.beta.kubernetes.io/azure-pls-name <PLS name> A létrehozandó PLS-erőforrás nevét meghatározó sztring. Választható "pls-<LB frontend config name>"
service.beta.kubernetes.io/azure-pls-resource-group Resource Group name Sztring annak az erőforráscsoportnak a nevével, amelyben a PLS-erőforrás létrejön Választható MC_ resource
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet <Subnet name> Sztring, amely azt az alhálózatot jelzi, amelyre a PLS üzembe lesz helyezve. Ennek az alhálózatnak ugyanabban a virtuális hálózaton kell lennie, mint a háttérkészletnek. A PLS NAT IP-címek ezen az alhálózaton belül vannak lefoglalva. Választható Ha service.beta.kubernetes.io/azure-load-balancer-internal-subneta rendszer ezt az ILB-alhálózatot használja. Ellenkező esetben a konfigurációs fájl alapértelmezett alhálózata lesz használva.
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count [1-8] Lefoglalni kívánt privát NAT-IP-címek teljes száma. Választható 1
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address "10.0.0.7 ... 10.0.0.10" A lefoglalandó statikus IPv4 IP-címek szóközzel elválasztott listája. (Az IPv6 jelenleg nem támogatott.) Az IP-címek teljes száma nem lehet nagyobb, mint a megadott IP-címek száma.service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count Ha kevesebb IP-cím van megadva, a többi dinamikusan lesz lefoglalva. A lista első IP-címe a következőképpen van beállítva Primary: . Választható Minden IP-cím dinamikusan van lefoglalva.
service.beta.kubernetes.io/azure-pls-fqdns "fqdn1 fqdn2" A PLS-hez társított teljes tartománynevek szóközzel elválasztott listája. Választható []
service.beta.kubernetes.io/azure-pls-proxy-protocol "true" vagy "false" Logikai érték, amely azt jelzi, hogy a TCP PROXY protokollt engedélyezni kell-e a PLS-en a kapcsolati adatok továbbításához, beleértve a hivatkozás azonosítóját és a forrás IP-címét. Vegye figyelembe, hogy a háttérszolgáltatásnak támogatnia kell a PROXY protokollt, vagy a kapcsolatok sikertelenek lesznek. Választható false
service.beta.kubernetes.io/azure-pls-visibility "sub1 sub2 sub3 … subN" vagy "*" AzOknak az Azure-előfizetés-azonosítóknak a szóközzel elválasztott listája, amelyeknél a privát kapcsolat szolgáltatás látható. A "*" PLS-t az összes al számára elérhetővé teheti (legkevésbé korlátozó). Választható Csak a szerepköralapú hozzáférés-vezérlést jelző üres lista [] : Ez a privát kapcsolati szolgáltatás csak a szerepköralapú hozzáférés-vezérlési engedélyekkel rendelkező személyek számára lesz elérhető a címtárban. (Legkorlátozóbb)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" Az Azure-előfizetés-azonosítók szóközzel elválasztott listája. Ez lehetővé teszi, hogy a PE-kapcsolatkérések automatikusan jóváhagyva legyenek a PLS-nek felsorolt előfizetésekből. Ez csak akkor működik, ha a láthatóság "*" értékre van állítva. Választható []

Magánhálózatok használata

Az AKS-fürt létrehozásakor speciális hálózati beállításokat adhat meg. Ezek a beállítások lehetővé teszik a fürt üzembe helyezését egy meglévő Azure-beli virtuális hálózaton és alhálózatokon. Üzembe helyezheti például az AKS-fürtöt egy, a helyszíni környezethez csatlakoztatott magánhálózaton, és futtathat olyan szolgáltatásokat, amelyek csak belsőleg érhetők el.

További információ: saját virtuális hálózati alhálózatok konfigurálása a Kubenettel vagy az Azure CNI-vel.

Az AKS-fürtön magánhálózatot használó belső terheléselosztó üzembe helyezéséhez nem kell módosítania az előző lépéseket. A terheléselosztó ugyanabban az erőforráscsoportban jön létre, mint az AKS-fürt, de ehelyett a magánhálózathoz és az alhálózathoz csatlakozik, ahogyan az alábbi példában látható:

$ kubectl get service internal-app

NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
internal-app   LoadBalancer   10.1.15.188   10.0.0.35     80:31669/TCP   1m

Feljegyzés

Az AKS-fürt által használt fürtidentitásnak legalább hálózati közreműködői szerepkörrel kell rendelkeznie a virtuális hálózati erőforráson. A fürt identitását a az aks show parancs használatával tekintheti meg, például az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". A hálózati közreműködői szerepkört az role assignment create a paranccsal rendelheti hozzá, például az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".

Ha ehelyett egyéni szerepkört szeretne definiálni, a következő engedélyekre van szüksége:

  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read

További információ: Virtuális hálózati alhálózat hozzáadása, módosítása vagy törlése.

Másik alhálózat megadása

  • Adja hozzá a azure-load-balancer-internal-subnet megjegyzést a szolgáltatáshoz a terheléselosztó alhálózatának megadásához. A megadott alhálózatnak ugyanabban a virtuális hálózaton kell lennie, mint az AKS-fürtnek. Üzembe helyezéskor a terheléselosztó EXTERNAL-IP címe a megadott alhálózat része.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
        service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    

A terheléselosztó törlése

A terheléselosztó az összes szolgáltatás törlésekor törlődik.

Bármely Kubernetes-erőforráshoz hasonlóan közvetlenül is törölhet egy szolgáltatást, például kubectl delete service internal-appa mögöttes Azure-terheléselosztót is.

Következő lépések

A Kubernetes-szolgáltatásokkal kapcsolatos további információkért tekintse meg a Kubernetes-szolgáltatások dokumentációját.