首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GKE NEG Readiness Failing with Windows Containers and Readiness

GKE NEG Readiness Failing with Windows Containers and Readiness
EN

Stack Overflow用户
提问于 2020-07-15 07:18:53
回答 2查看 420关注 0票数 2

我遇到了一个问题:

尝试使用容器本机负载平衡(CNLB)时,获取运行状况检查以使在IIS容器中运行的.Net应用程序成功。

我有一个由GKE中的入口资源定义创建的网络端点组(NEG),其中包含一个VPC本机群集。

当我通过公开NodePort或创建LoadBalancer类型的服务来绕过CNLB时,站点解决了问题。

describe中的所有pod条件看起来都很好:pod readiness

在运行describe endpointsready addresses时显示网络端点

这是由负载均衡器生成的健康检查:GCP Health Check

当从同一VPC中的其他容器或虚拟机命中这些端点时,/health.htm以200作为响应。下面是来自相同名称空间的容器的代码,尽管我已经使用Linux重现了它,不是在集群中,而是在相同的VPC中:endpoint responds

但尽管如此,健康检查报告我的NEG中的pods不健康:Unhealthy Endpoints

堆栈驱动程序日志确认请求超时,但我不确定为什么端点会响应其他实例,而不是LB:Stackdriver Health Check Log

我确认GKE创建了看起来正确的防火墙规则,它应该允许从LB到pods的流量:firewall

下面是我正在使用的YAML:

部署:

代码语言:javascript
复制
apiVersion: apps/v1                                                  
kind: Deployment                                                     
metadata:                                                            
  labels:                                                            
    app: subdomain.domain.tld                                       
  name: subdomain-domain-tld                                       
  namespace: subdomain-domain-tld
spec:                                                                
  replicas: 3                                                        
  selector:                                                          
    matchLabels:                                                     
      app: subdomain.domain.tld                                     
  template:                                                          
    metadata:                                                        
      labels:                                                        
        app: subdomain.domain.tld
    spec:                                                            
      containers:                                                    
      - image: gcr.io/ourrepo/ourimage
        name: subdomain-domain-tld
        ports:                                                       
        - containerPort: 80                                          
        readinessProbe:                                              
          httpGet:                                                   
            path: /health.htm                                        
            port: 80                                                 
          initialDelaySeconds: 60                                    
          periodSeconds: 60                                          
          timeoutSeconds: 10                                         
        volumeMounts:                                                
        - mountPath: C:\some-secrets                                      
          name: some-secrets
      nodeSelector:                                                  
        kubernetes.io/os: windows                                    
      volumes:                                                       
      - name: some-secrets                                    
        secret:                                                      
          secretName: some-secrets

服务:

代码语言:javascript
复制
apiVersion: v1                                                       
kind: Service                                                        
metadata:                                                            
  labels:                                                            
    app: subdomain.domain.tld                                     
  name: subdomain-domain-tld-service
  namespace: subdomain-domain-tld
spec:                                                                
  ports:                                                             
  - port: 80                                                         
    targetPort: 80                                                   
  selector:                                                          
    app: subdomain.domain.tld                                       
  type: NodePort                 

入口是非常基本的,因为我们在这个站点上并不需要多个路由,然而,我怀疑我们在这里遇到了什么问题。

代码语言:javascript
复制
apiVersion: extensions/v1beta1                                       
kind: Ingress                                                        
metadata:                                                            
  annotations:                                                       
    kubernetes.io/ingress.class: gce
  labels:                                                            
    app: subdomain.domain.tld                                       
  name: subdomain-domain-tld-ingress
  namespace: subdomain-domain-tld
spec:                                                                
  backend:                                                           
    serviceName: subdomain-domain-tld-service
    servicePort: 80

最后一个有点相关的细节是,我尝试了本文档中提供的步骤,它起作用了,但它与我的情况不同,因为它没有使用Windows Containers或Readiness:https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing#using-pod-readiness-feedback

任何建议都将不胜感激。我已经花了两天的时间在这个问题上,我相信这是显而易见的,但我就是看不到问题所在。

EN

回答 2

Stack Overflow用户

发布于 2020-07-29 03:35:47

显然没有文档记录,但在撰写本文时,该功能还不能与Windows容器一起使用。我联系了一位GCP工程师,他们提供了以下内容:

经过进一步的调查,我发现使用LoadBalancer服务的Windows容器是有效的,但是,使用带有NEGS的入口的Windows容器是一个限制,所以,我已经打开了一个更新公共文档的内部案例1。

由于Ingress + NEG不起作用(根据限制),我建议您使用您提到的任何选项,要么公开NodePort,要么创建LoadBalancer类型的服务。

票数 1
EN

Stack Overflow用户

发布于 2021-06-15 16:17:32

创建入口时,生成的HC探测器将默认在与应用程序相同的服务端口和路径上执行HealthCheck。在本例中,Path /上的端口80

看起来你的应用报告它在端口80上是healthCheck,但在/health.htm路径上。

您将需要通过BackendConfig CRD添加自定义healthCheck。看看这个链接1.你可以在同一页中找到如何将BackendConfig关联到入口

您使用的是什么版本的GKE?从您使用的Ingress来看,这似乎是一个旧版本。

1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62905371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档