Azure AKS内部负载平衡器未响应请求

kknvjkwl  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(3)|浏览(190)

我有一个AKS集群,以及一个单独的虚拟机。AKS集群和虚拟机在同一个VNET(以及子网)中。
我用下面的yaml部署了一个echo服务器,我可以直接从虚拟机用vnet ip curl pod。但是当用负载平衡器尝试时,没有任何返回。真的不知道我错过了什么。任何帮助都是感激的。

apiVersion: v1
kind: Service
metadata:
  name: echo-server
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: echo-server

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: echo-server
  template:
    metadata:
      labels:
        app: echo-server
    spec:
      containers:
        - name: echo-server
          image: ealen/echo-server
          ports:
            - name: http
              containerPort: 8080

以下图片演示了


的情况
我希望当curl来自负载平衡器的vnet ip时,会收到与我直接curl pod ip时相同的响应

k4aesqcs

k4aesqcs1#

是否已检查单元的IP是否正确Map为服务的端点?您可以使用以下命令进行检查:
k describe svc echo-server -n test | grep Endpoints
如果没有,请检查标签和选择器与您的实际部署(而不是资源放在描述)。
如果Map正确,您是否确定正在使用的虚拟机(_@tester)位于正确的子网中,该子网应包含iLB IP;也是10.240.0.226?

rfbsl7qr

rfbsl7qr2#

找到了解决方案,我唯一需要做的事情就是将下面的内容添加到Service声明中:

externalTrafficPolicy: 'Local'

完整的yaml如下

apiVersion: v1
kind: Service
metadata:
  name: echo-server
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  externalTrafficPolicy: 'Local'
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: echo-server

以前它被设置为“群集”。
刚刚得到了Azure的支持,似乎是一个特定的bug(它发生在较新版本的AKS),张贴在这里的相关链接:https://github.com/kubernetes/ingress-nginx/issues/8501

vs3odd8k

vs3odd8k3#

您可以检查内部负载平衡器运行状况探测器吗?
“对于Kubernetes 1.24及更高版本,LoadBalancer类型且具有appProtocol HTTP/HTTPS的服务将切换为使用HTTP/HTTPS作为运行状况探测协议(而在v1.24.0之前,它使用TCP)。并且/将被用作默认的健康探测请求路径。如果您的服务对/没有响应200,请确保您正在设置服务注解service.beta.kubernetes.io/port_{port}_health-probe_request-path或service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path(适用于所有端口),以避免服务中断。”(参考:(第10页)
如果您使用的是nginx-ingress控制器,请尝试添加doc中提到的控制器:(基本配置)

helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
  --reuse-values \
  --namespace <NAMESPACE> \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz

相关问题