Sdílet prostřednictvím


Použití interního nástroje pro vyrovnávání zatížení se službou Azure Kubernetes Service (AKS)

K omezení přístupu k aplikacím ve službě Azure Kubernetes Service (AKS) můžete vytvořit a použít interní nástroj pro vyrovnávání zatížení. Interní nástroj pro vyrovnávání zatížení nemá veřejnou IP adresu a zpřístupňuje službu Kubernetes jenom aplikacím, které můžou dosáhnout privátní IP adresy. Tyto aplikace můžou být ve stejné virtuální síti nebo v jiné virtuální síti prostřednictvím partnerského vztahu virtuálních sítí. V tomto článku se dozvíte, jak vytvořit a používat interní nástroj pro vyrovnávání zatížení s AKS.

Poznámka:

Azure Load Balancer je k dispozici ve dvou SKU: Basic a Standard. Skladová položka Standard se ve výchozím nastavení používá při vytváření clusteru AKS. Když vytvoříte typ služby LoadBalancer , získáte stejný typ nástroje pro vyrovnávání zatížení jako při zřizování clusteru. Další informace najdete v tématu Porovnání skladových položek služby Azure Load Balancer.

Než začnete

Vytvořte interní nástroj pro vyrovnávání zatížení.

  1. Vytvořte manifest služby s názvem internal-lb.yaml typu LoadBalancer služby a poznámkou azure-load-balancer-internal .

    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. Pomocí příkazu nasaďte interní nástroj pro kubectl apply vyrovnávání zatížení. Tento příkaz vytvoří nástroj pro vyrovnávání zatížení Azure ve skupině prostředků uzlu připojené ke stejné virtuální síti jako cluster AKS.

    kubectl apply -f internal-lb.yaml
    
  3. Pomocí příkazu zobrazte podrobnosti o službě kubectl get service .

    kubectl get service internal-app
    

    IP adresa interního nástroje pro vyrovnávání zatížení se zobrazí ve EXTERNAL-IP sloupci, jak je znázorněno v následujícím příkladu výstupu. V tomto kontextu externí odkazuje na externí rozhraní nástroje pro vyrovnávání zatížení. Neznamená to, že obdrží veřejnou externí IP adresu. Tato IP adresa se dynamicky přiřazuje ze stejné podsítě jako cluster AKS.

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

Zadání IP adresy

Když pro nástroj pro vyrovnávání zatížení zadáte IP adresu, musí se zadaná IP adresa nacházet ve stejné podsíti jako cluster AKS, ale už se nedá přiřadit k prostředku. Neměli byste například používat IP adresu v rozsahu určeném pro podsíť Kubernetes v clusteru AKS.

K získání podsítí ve virtuální síti můžete použít az network vnet subnet list příkaz Azure CLI nebo rutinu Get-AzVirtualNetworkSubnetConfig PowerShellu.

Další informace o podsítích najdete v tématu Přidání fondu uzlů s jedinečnou podsítí.

Pokud chcete použít konkrétní IP adresu s nástrojem pro vyrovnávání zatížení, máte dvě možnosti: nastavit poznámky služby nebo přidat vlastnost LoadBalancerIP do manifestu YAML nástroje pro vyrovnávání zatížení.

Důležité

Přidání vlastnosti LoadBalancerIP do manifestu YAML nástroje pro vyrovnávání zatížení zastaralá po upstreamu Kubernetes. I když současné využití zůstává stejné a očekává se, že stávající služby budou fungovat bez úprav, důrazně doporučujeme místo toho nastavit poznámky ke službám .

  1. Nastavte poznámky služby pro service.beta.kubernetes.io/azure-load-balancer-ipv4 adresu IPv4 a service.beta.kubernetes.io/azure-load-balancer-ipv6 pro adresu IPv6.

    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. Pomocí příkazu zobrazte podrobnosti o službě kubectl get service .

    kubectl get service internal-app
    

    IP adresa ve EXTERNAL-IP sloupci by měla odrážet zadanou IP adresu, jak je znázorněno v následujícím příkladu výstupu:

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

Další informace o konfiguraci nástroje pro vyrovnávání zatížení v jiné podsíti najdete v tématu Určení jiné podsítě.

Než začnete

  1. Vytvořte manifest služby s názvem internal-lb-pls.yaml typu LoadBalancer služby a azure-load-balancer-internal poznámkami.azure-pls-create Další možnosti najdete v dokumentu návrhu integrace služby Azure Private Link.

    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. Pomocí příkazu nasaďte interní nástroj pro kubectl apply vyrovnávání zatížení. Tento příkaz vytvoří nástroj pro vyrovnávání zatížení Azure ve skupině prostředků uzlu připojené ke stejné virtuální síti jako cluster AKS. Vytvoří také objekt služby Private Link, který se připojí ke konfiguraci front-endové IP adresy nástroje pro vyrovnávání zatížení přidruženého ke službě Kubernetes.

    kubectl apply -f internal-lb-pls.yaml
    
  3. Pomocí příkazu zobrazte podrobnosti o službě kubectl get service .

    kubectl get service internal-app
    

    IP adresa interního nástroje pro vyrovnávání zatížení se zobrazí ve EXTERNAL-IP sloupci, jak je znázorněno v následujícím příkladu výstupu. V tomto kontextu externí odkazuje na externí rozhraní nástroje pro vyrovnávání zatížení. Neznamená to, že obdrží veřejnou externí IP adresu.

    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. Pomocí příkazu zobrazte podrobnosti objektu az network private-link-service list služby Private Link.

    # 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
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

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

Privátní koncový bod umožňuje privátní připojení k objektu služby Kubernetes prostřednictvím služby Private Link, kterou jste vytvořili.

  • Pomocí příkazu vytvořte privátní koncový bod az network private-endpoint create .

    # 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
    

Vlastní nastavení PLS prostřednictvím poznámek

Níže jsou uvedené poznámky, které lze použít k přizpůsobení prostředku PLS.

Poznámka Hodnota Popis Požaduje se Výchozí
service.beta.kubernetes.io/azure-pls-create "true" Logická hodnota označující, jestli se má vytvořit PLS. Požaduje se
service.beta.kubernetes.io/azure-pls-name <PLS name> Řetězec určující název prostředku PLS, který se má vytvořit. Volitelné "pls-<LB frontend config name>"
service.beta.kubernetes.io/azure-pls-resource-group Resource Group name Řetězec určující název skupiny prostředků, ve které se vytvoří prostředek PLS Volitelné MC_ resource
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet <Subnet name> Řetězec označující podsíť, do které se nasadí PLS. Tato podsíť musí existovat ve stejné virtuální síti jako back-endový fond. IP adresy PŘEKLADU adres (NAT) PLS se přidělují v rámci této podsítě. Volitelné Pokud service.beta.kubernetes.io/azure-load-balancer-internal-subnetse použije tato podsíť interního nástroje pro vyrovnávání zatížení. Jinak se použije výchozí podsíť z konfiguračního souboru.
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count [1-8] Celkový počet privátních IP adres PROT, které se mají přidělit. Volitelné 0
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address "10.0.0.7 ... 10.0.0.10" Seznam statických IP adres IPv4 oddělených mezerami, které se mají přidělit. (V tuto chvíli se protokol IPv6 nepodporuje.) Celkový početIPch service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count Pokud je zadaných méně IP adres, zbytek se dynamicky přidělí. První IP adresa v seznamu je nastavena jako Primary. Volitelné Všechny IP adresy se přidělují dynamicky.
service.beta.kubernetes.io/azure-pls-fqdns "fqdn1 fqdn2" Seznam plně kvalifikovaných názvů domén přidružených k PLS je oddělený mezerou. Volitelné []
service.beta.kubernetes.io/azure-pls-proxy-protocol "true" nebo "false" Logická hodnota označující, jestli má být v PLS povolený protokol TCP proxy, aby předával informace o připojení, včetně ID propojení a zdrojové IP adresy. Mějte na paměti, že back-endová služba musí podporovat protokol PROXY nebo připojení selžou. Volitelné false
service.beta.kubernetes.io/azure-pls-visibility "sub1 sub2 sub3 … subN" nebo "*" Seznam ID předplatného Azure oddělených mezerami, pro které je služba private link viditelná. Slouží "*" k vystavení PLS všem dílčím objektům (nejméně omezující). Volitelné Prázdný seznam [] označující pouze řízení přístupu na základě role: Tato služba privátního propojení bude dostupná jenom jednotlivcům s oprávněními řízení přístupu na základě role v rámci vašeho adresáře. (Nejvíce omezující)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" Seznam ID předplatného Azure oddělených mezerami To umožňuje automatické schválení žádostí o připojení PE z předplatných uvedených k PLS. Tato možnost funguje jenom v případě, že je viditelnost nastavená na "*". Volitelné []

Použití privátních sítí

Při vytváření clusteru AKS můžete zadat upřesňující nastavení sítě. Tato nastavení umožňují nasadit cluster do existující virtuální sítě a podsítí Azure. Cluster AKS můžete například nasadit do privátní sítě připojené k místnímu prostředí a spouštět služby, které jsou přístupné jenom interně.

Další informace najdete v tématu Konfigurace vlastních podsítí virtuální sítě s využitím Kubenetu nebo Azure CNI.

K nasazení interního nástroje pro vyrovnávání zatížení, který používá privátní síť v clusteru AKS, nemusíte provádět žádné změny v předchozích krocích. Nástroj pro vyrovnávání zatížení se vytvoří ve stejné skupině prostředků jako váš cluster AKS, ale je místo toho připojený k privátní virtuální síti a podsíti, jak je znázorněno v následujícím příkladu:

$ 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

Poznámka:

Identita clusteru používaná clusterem AKS musí mít alespoň roli Přispěvatel sítě v prostředku virtuální sítě. Identitu clusteru můžete zobrazit pomocí az aks show příkazu, například az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". Roli Přispěvatel sítě můžete přiřadit pomocí az role assignment create příkazu, například az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".

Pokud chcete místo toho definovat vlastní roli , potřebujete následující oprávnění:

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

Další informace najdete v tématu Přidání, změna nebo odstranění podsítě virtuální sítě.

Zadání jiné podsítě

  • Přidejte poznámku azure-load-balancer-internal-subnet ke službě a zadejte podsíť vašeho nástroje pro vyrovnávání zatížení. Zadaná podsíť musí být ve stejné virtuální síti jako cluster AKS. Při nasazení je adresa nástroje EXTERNAL-IP pro vyrovnávání zatížení součástí zadané podsítě.

    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
    

Odstranění nástroje pro vyrovnávání zatížení

Nástroj pro vyrovnávání zatížení se odstraní, když se odstraní všechny jeho služby.

Stejně jako u jakéhokoli prostředku Kubernetes můžete přímo odstranit službu, například kubectl delete service internal-app, která také odstraní základní nástroj pro vyrovnávání zatížení Azure.

Další kroky

Další informace o službách Kubernetes najdete v dokumentaci ke službám Kubernetes.