可在错误的端口上访问 AKS 负载均衡器服务

AKS load balancer service accessible on wrong port

我有一个简单的 ASP.NET 核心 Web API。它在本地工作。我使用以下 yaml 将其部署在 Azure AKS 中:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sa-be
spec:
  selector:
    matchLabels:
      name: sa-be
  template:
    metadata:
      labels:
        name: sa-be
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - name: sa-be
        image: francotiveron/anapi:latest
        resources:
          limits:
            memory: "64Mi"
            cpu: "250m"
---
apiVersion: v1
kind: Service
metadata:
  name: sa-be-s
spec:
  type: LoadBalancer
  selector:
    name: sa-be
  ports:
  - port: 8080
    targetPort: 80

结果是:

> kubectl get service sa-be-s
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
sa-be-s   LoadBalancer   10.0.157.200   20.53.188.247   8080:32533/TCP   4h55m



> kubectl describe service sa-be-s 
Name:                     sa-be-s
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 name=sa-be
Type:                     LoadBalancer
IP Families:              <none>
IP:                       10.0.157.200
IPs:                      <none>
LoadBalancer Ingress:     20.53.188.247
Port:                     <unset>  8080/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  32533/TCP
Endpoints:                10.244.2.5:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

我希望在 http://20.53.188.247:32533/, instead it is reachable only at http://20.53.188.247:8080/

访问 Web API

谁能解释一下

是的,意料之中。 Explained: Kubernetes Service Ports - 请阅读全文以了解后台发生的情况。

负载均衡器部分:

apiVersion: v1
kind: Service
metadata:
  name: sa-be-s
spec:
  type: LoadBalancer
  selector:
    name: sa-be
  ports:
  - port: 8080
    targetPort: 80

port is the port the cloud load balancer will listen on (8080 in our example) and targetPort is the port the application is listening on in the Pods/containers. Kubernetes works with your cloud’s APIs to create a load balancer and everything needed to get traffic hitting the load balancer on port 8080 all the way back to the Pods/containers in your cluster listening on targetPort 80.

现在主要: 在幕后,许多实现创建 NodePorts 以将云负载平衡器粘合到集群。车流通常是这样的