Använda en intern lastbalanserare med Azure Kubernetes Service (AKS)

Om du vill begränsa åtkomsten till dina program i Azure Kubernetes Service (AKS) kan du skapa och använda en intern lastbalanserare. En intern lastbalanserare gör en Kubernetes-tjänst endast tillgänglig för program som körs i samma virtuella nätverk som Kubernetes-klustret. Den här artikeln visar hur du skapar och använder en intern lastbalanserare med Azure Kubernetes Service (AKS).

Anteckning

Azure Load Balancer finns i två SKU:er – Basic och Standard. Standard-SKU:n används som standard när du skapar ett AKS-kluster. När du skapar en tjänst med typen LoadBalancer får du samma lastbalanserare som när du etablerar klustret. Mer information finns i Jämförelse mellan SKU:er för Azure-lastbalanserare.

Innan du börjar

Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du behöver ett AKS-kluster kan du läsa aks-snabbstarten med Hjälp av Azure CLI eller med hjälp av Azure Portal.

Du behöver också ha Azure CLI version 2.0.59 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

AKS-klusteridentiteten behöver behörighet att hantera nätverksresurser om du använder ett befintligt undernät eller en resursgrupp. Mer information finns i Använda kubenet-nätverk med dina egna IP-adressintervall i Azure Kubernetes Service (AKS) eller Konfigurera Azure CNI-nätverk i Azure Kubernetes Service (AKS). Om du konfigurerar lastbalanseraren så att den använder en IP-adress i ett annat undernät kontrollerar du att AKS-klusteridentiteten också har läsbehörighet till undernätet.

Mer information om behörigheter finns i Delegera AKS-åtkomst till andra Azure-resurser.

Skapa en intern lastbalanserare

Skapa en intern lastbalanserare genom att skapa ett tjänstmanifest med namnet internal-lb.yaml med tjänsttypen LoadBalancer och den interna kommentaren azure-load-balancer-internal enligt följande exempel:

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

Distribuera den interna lastbalanseraren med kubectl apply och ange namnet på ditt YAML-manifest:

kubectl apply -f internal-lb.yaml

En Azure-lastbalanserare skapas i nodresursgruppen och ansluts till samma virtuella nätverk som AKS-klustret.

När du visar tjänstinformationen visas IP-adressen för den interna lastbalanseraren i kolumnen EXTERNAL-IP . I det här sammanhanget är Extern i förhållande till lastbalanserarens externa gränssnitt, inte att den tar emot en offentlig, extern IP-adress. Det kan ta en minut eller två innan IP-adressen ändras från <väntande> till en faktisk intern IP-adress, som du ser i följande exempel:

$ kubectl get service internal-app

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

Ange en IP-adress

Om du vill använda en specifik IP-adress med den interna lastbalanseraren lägger du till egenskapen loadBalancerIP i YAML-manifestet för lastbalanseraren. I det här scenariot måste den angivna IP-adressen finnas i samma undernät som AKS-klustret, men kan inte redan tilldelas till en resurs. Till exempel bör inte en IP-adress i intervallet som är avsett för Kubernetes-undernätet i AKS-klustret användas.

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

När du distribuerar och visar tjänstinformationen visar IP-adressen i kolumnen EXTERNAL-IP din angivna IP-adress :

$ kubectl get service internal-app

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

Mer information om hur du konfigurerar lastbalanseraren i ett annat undernät finns i Ange ett annat undernät

Använda privata nätverk

När du skapar ditt AKS-kluster kan du ange avancerade nätverksinställningar. Med den här metoden kan du distribuera klustret till ett befintligt virtuellt Azure-nätverk och undernät. Ett scenario är att distribuera ditt AKS-kluster till ett privat nätverk som är anslutet till din lokala miljö och köra tjänster som endast är tillgängliga internt. Mer information finns i Konfigurera egna undernät för virtuella nätverk med Kubenet eller Azure CNI.

Inga ändringar i föregående steg krävs för att distribuera en intern lastbalanserare i ett AKS-kluster som använder ett privat nätverk. Lastbalanseraren skapas i samma resursgrupp som ditt AKS-kluster men ansluts till ditt privata virtuella nätverk och undernät, som du ser i följande exempel:

$ 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

Anteckning

Du kan behöva tilldela klusteridentiteten för ditt AKS-kluster rollen Nätverksdeltagare till resursgruppen där dina virtuella Azure-nätverksresurser distribueras. Visa klusteridentiteten med az aks show, till exempel az aks show --resource-group myResourceGroup --name myAKSCluster --query "identity". Om du vill skapa en rolltilldelning använder du kommandot az role assignment create .

Ange ett annat undernät

Om du vill ange ett undernät för lastbalanseraren lägger du till anteckningen azure-load-balancer-internal-subnet i tjänsten. Det angivna undernätet måste finnas i samma virtuella nätverk som ditt AKS-kluster. När lastbalanserarens EXTERNAL-IP-adress distribueras ingår den i det angivna undernätet.

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

Ta bort lastbalanseraren

När alla tjänster som använder den interna lastbalanseraren tas bort tas även själva lastbalanseraren bort.

Du kan också ta bort en tjänst direkt som med alla Kubernetes-resurser, till exempel kubectl delete service internal-app, som även tar bort den underliggande Azure-lastbalanseraren.

Nästa steg

Läs mer om Kubernetes-tjänster i Kubernetes Services-dokumentationen.