无法访问部署在 AKS 上的应用程序

Can't access an application deployed on AKS

我正在尝试访问部署在 Azure AKS 上的简单 Asp.net 核心应用程序,但我做错了。

这是部署.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aspnetapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aspnet
  template:
    metadata:
      labels:
        app: aspnet
    spec:
      containers:
      - name: aspnetapp
        image: <my_image>
        resources:
            limits:
              cpu: "0.5"
              memory: 64Mi
        ports:
        - containerPort: 8080

这是服务.yml

apiVersion: v1
kind: Service
metadata:
  name: aspnet-loadbalancer
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    name: aspnetapp

一切似乎都已正确部署

我做的另一项检查是进入 pod 和 运行 curl http://localhost:80, 应用程序 运行ning 正确,但如果我尝试使用 http://20.103.147.69 从浏览器访问应用程序,则会返回超时。

还有什么问题?

在您的部署中,您将容器配置为侦听端口 8080。您需要在服务定义中添加设置为 8080 的目标端口值。

Documentation

您似乎没有 Ingress Controller deployed on your AKS as you have your application exposed directly. You will need that in order to get ingress 工作。

要验证您的应用程序是否正常工作,您可以使用 port-forward 然后访问 http://localhost:8080 :

kubectl port-forward aspnetapp 8080:8080

但是你应该定义。安装 ingress-controller:这是来自 MS 的工作流程,用于在您的集群上安装 ingress-nginx 作为 IC。

然后您将只向 Internet 公开 ingress-controller,如果您提前创建了 PublicIP,也可以静态指定 loadBalancerIP:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-resource-group: myResourceGroup # only needed if the LB is in another RG
  name: ingress-nginx-controller
spec:
  loadBalancerIP: <YOUR_STATIC_IP>
  type: LoadBalancer

Ingress Controller 然后将使用 Ingress 资源将传入流量路由到您的应用程序:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
spec:
  ingressClassName: nginx # ingress-nginx specifix
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

PS:切勿将您的应用程序直接暴露在互联网上,始终使用入口控制器