我有一个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时相同的响应
3条答案
按热度按时间k4aesqcs1#
是否已检查单元的IP是否正确Map为服务的端点?您可以使用以下命令进行检查:
k describe svc echo-server -n test | grep Endpoints
如果没有,请检查标签和选择器与您的实际部署(而不是资源放在描述)。
如果Map正确,您是否确定正在使用的虚拟机(_@tester)位于正确的子网中,该子网应包含iLB IP;也是10.240.0.226?
rfbsl7qr2#
找到了解决方案,我唯一需要做的事情就是将下面的内容添加到Service声明中:
完整的yaml如下
以前它被设置为“群集”。
刚刚得到了Azure的支持,似乎是一个特定的bug(它发生在较新版本的AKS),张贴在这里的相关链接:https://github.com/kubernetes/ingress-nginx/issues/8501
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中提到的控制器:(基本配置)