在Kubernetes集群上无法访问LoadBalancer类型的外部IP

问题描述

我正在尝试在Azure Kubernetes群集的外部IP地址上使用type: LoadBalancer公开我的Python应用程序。但是,无论我做什么(据我所知),我都无法访问IP地址。我正在使用terraform来配置群集。请在下面查看我的文件

deployment.yml

apiVersion: v1
kind: Namespace
Metadata:
  name: identity
  namespace: default
---
apiVersion: v1
kind: Service
Metadata:
  name: identity-svc
  namespace: default
  labels:
    name: identity-svc
    env: dev
    app: identity-svc
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-resource-group: MC_identity-k8s-rg_identity-k8s-aks_westeurope
spec:
  type: LoadBalancer 
  ports:
  - name: http
    port: 80
    targetPort: 8000
  selector:
    app: identity-svc
---
apiVersion: v1
data:
  .dockerconfigjson: 50aXR5MngwIn19fQ...
kind: Secret
Metadata:
  creationTimestamp: null
  name: acr-secret
  namespace: default
type: kubernetes.io/dockerconfigjson
---
apiVersion: apps/v1
kind: Deployment
Metadata:
  name: identity-deploy
  namespace: default
  labels:
    name: identity-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: identity-svc
  template:
    Metadata:
      namespace: default
      labels:
        app: identity-svc
    spec:
      imagePullSecrets:
        - name: acr-secret
      containers:
      - name: identityservice
        image: identityservice.azurecr.io/identityservice:${{ github.run_id }}
        env:
          - name: SECRET_KEY
            value: ${secrets.SECRET_KEY}
          - name: ALLOWED_HOSTS
            value: ${secrets.ALLOWED_HOSTS}
          - name: DATABASE_HOST
            value: ${secrets.DATABASE_HOST}
          - name: DEBUG
            value: true
        resources:
          requests:
            cpu: 0.5
            memory: "500Mi"
          limits:
            cpu: 2
            memory: "1000Mi"
        ports:
        - containerPort: 8000
          name: http
        imagePullPolicy: Always
      restartPolicy: Always

service.yml

apiVersion: v1
kind: Service
Metadata:
  name: identity-svc
  namespace: default
  labels:
    name: identity-svc
    env: dev
    app: identity-svc
spec:
  selector:
    app: identity-svc
  type: LoadBalancer 
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8000

aks-cluster.tf

resource "azurerm_kubernetes_cluster" "aks" {
  name                = "${var.name_prefix}-aks"
  location            = var.location
  resource_group_name = var.resourcename
  dns_prefix          = "${var.name_prefix}-dns"
  kubernetes_version  = "1.19.0"

  default_node_pool {
    name            = "identitynode"
    node_count      = 1
    vm_size         = "Standard_D2_v2"
    os_disk_size_gb = 30
  }

  service_principal {
    client_id     = var.client_id
    client_secret = var.client_secret
  }

  network_profile {
    network_plugin    = "kubenet"
    load_balancer_sku = "Standard"
  }
}

我还尝试使用以下方法实现Nginx入口;

provider "helm" {
  #  install_tiller = true

  kubernetes {
    host                   = azurerm_kubernetes_cluster.aks.kube_config.0.host
    client_certificate     = base64decode(azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate)
    client_key             = base64decode(azurerm_kubernetes_cluster.aks.kube_config.0.client_key)
    cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate)
    load_config_file       = false
  }
}

# Add Kubernetes Stable Helm charts repo
data "helm_repository" "stable" {
  name = "stable"
  url  = "https://kubernetes-charts.storage.googleapis.com"
}

# Create Static Public IP Address to be used by Nginx Ingress
resource "azurerm_public_ip" "Nginx_ingress" {
  name                = "nginx-ingress-pip"
  location            = azurerm_kubernetes_cluster.aks.location
  resource_group_name = azurerm_kubernetes_cluster.aks.node_resource_group
  sku                 = "Standard"
  allocation_method   = "Static"
  domain_name_label   = var.name_prefix
}


# Install Nginx Ingress using Helm Chart
resource "helm_release" "Nginx" {
  name       = "nginx-ingress"
  repository = data.helm_repository.stable.url
  #repository = data.helm_repository.stable.Metadata.0.name
  chart = "nginx-ingress"
  # namespace  = "kube-system"
  namespace = "default"

  set {
    name  = "rbac.create"
    value = "false"
  }

  set {
    name  = "controller.service.externalTrafficPolicy"
    value = "Cluster"
  }

  set {
    name  = "controller.service.loadBalancerIP"
    value = azurerm_public_ip.Nginx_ingress.ip_address
  }

使用最后一个Nginx入口,在访问由此产生的外部IP时,我不断收到default backend - 404错误

我的最终目标是使我的应用程序在外部IP上运行,无论使用哪种方法进行测试。

PS。 Dockerfile和docker-compose也公开了端口8000

任何帮助将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...