在某些情况下,我们提供的服务在尝试访问它们时没有任何响应。例如,Chrome显示ERR_EMPTY_RESPONSE,偶尔我们也会遇到其他错误,例如408,我可以肯定它是从ELB返回的,而不是从应用程序本身返回的。
经过长期的调查,包括对节点本身进行切换,对负载均衡器进行试验等,我们仍然不确定问题实际存在于哪一层:是在Kubernetes本身,还是在Amazon EKS的支持服务中(ELB或其他方式)
还有什么可能导致这种行为?
答案 0 :(得分:0)
经过大量调查,我们正在解决许多问题:
*我们的应用程序并不总是按预期的方式运行。总是先检查一下。
*在我们的Kubernetes Service清单中,我们设置了externalTrafficPolicy: Local
,它可能应该可以工作,但是却给我们带来了问题。 (这是使用Classic Load Balancer进行的)service.beta.kubernetes.io/aws-load-balancer-type: "clb"
。因此,如果您在使用CLB时遇到问题,请删除externalTrafficPolicy
或将其显式设置为默认的“群集”值。
所以我们的清单现在是:
kind: Service
apiVersion: v1
metadata:
name: apollo-service
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "clb"
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:REDACTED"
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
spec:
externalTrafficPolicy: Cluster
selector:
app: apollo
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 80
type: LoadBalancer
答案 1 :(得分:0)
添加
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
为我修复了此问题