当前位置: 首页 > 知识库问答 >
问题:

库伯内特斯/GKE默认健康探测是否在创建时根据支持服务定义?

端木志诚
2023-03-14

背景:我在GKE上与Kubernetes一起部署了一个面向客户的web应用程序。像这样的应用程序一样,我想将流量从http重定向到https。

在过去,我会在haproxy或nginx中这样做,但现在我想在Kubernetes中这样做。出于某种原因,阅读这个主题似乎很难。https://github.com/kubernetes/ingress-gce/tree/2d2c91a608987d07205c4a93537c2938bc67df38#ingress-无法将http重定向到https

所以我决定让http通过我的webapp,让我的应用中的一线中间件来重定向。我读到GKE会像nginx一样设置x-forwarded-proto头。

所以我在应用程序node koa中做了一些类似的事情:

app.use((ctx, next) => {
  if (ctx.request.header['x-forwarded-proto'] === 'https') {
    return next()
  } else {
    const httpsHost = url.parse('http://' + ctx.request.header.host).hostname
    let redirectTo = 'https://' + httpsHost
    redirectTo += ctx.request.url
    ctx.response.status = 307
    ctx.response.redirect(redirectTo)
  }
})

这似乎在几分钟/秒内工作正常,但随后我的入口被标记为坏的:

GCloud控制台中的状态对我来说很难解释,但它似乎是一个默认的运行状况检查服务,因为我正在重定向307进行内部http运行状况检查:

请注意此处的根路径。

我终于能够通过在部署中手动指定探测器来解决这个问题

    readinessProbe:
      httpGet:
        path: /healthz
        port: 5002
    livenessProbe:
      httpGet:
        path: /healthz
        port: 5002

并在应用程序中照顾他们:

router.get('/healthz', ctx => {
  console.log([ctx.request.headers]) //eslint-disable-line
  ctx.response.status = 200
})

由此,我得到了健康探测器的另一个定义:

有了新版本的应用程序,我可以处理这个问题,一切都很开心,祝你好运。

最让我困惑的是,我仍然想知道的是,作为入口的一部分创建的这个默认探测在部署更改期间是持久的。我的意思是,在根据备份部署更新健康探测器之前,我需要拆除入口并重新创建它。仅更改定义了此项的部署并不会重新创建health probe服务的状态,而且它仍然与/。这使得调试这件事变得更加困难。

我已经仔细检查了这仍然是任何方向的情况。我删除了探针设置并重新应用了我的部署,但由于健康检查服务仍然存在问题,所以一切仍然正常 /healthz.但是,执行kubectl删除入口;kubectl创建-fingress.yml,它开始违背/再次失败。所以基本上入口是根据支持服务定义的。这是不是有点糟糕?

我仍在努力理解的是:

  1. 这是库伯内特斯还是只是GKE?
  2. 是否可以在不定义我自己的情况下禁用默认健康检查?
  3. 有没有更好/更干净的方法来实现我的目标?

共有1个答案

闾丘玺
2023-03-14

这是谷歌管理的kubernetes,这就是为什么谷歌会使用kubernetes引擎。

如果要删除或添加health ckeck prob,可以通过运行kubectl edit deployment

对您来说,更好的解决方案是在NGINX中使用反向代理这里是示例和配置,将超文本传输协议重定向到https。

 类似资料:
  • 我最近开始研究Kubernetes集群。在我们的集群中,对给定Kubernetes服务的网络调用流如下所示: 外部非K8S负载均衡器- 对于给定的服务,有两个副本。通过查看副本中容器的日志,我可以看到调用被路由到不同的pod。据我所知,我们还没有为Kubernetes中的服务明确设置任何负载平衡策略。 我有几个问题: 1)K8S是否有默认的负载平衡策略?我读过库贝-proxy和随机路由。它看起来绝

  • 我是Kubernetes平台的新手,尝试启用部署在Kubernetes平台上的tomcat web app的HTTPS安全连接。我对舱单感到困惑。与部署、服务和入口控制器相关的yml。 那么,我是否也必须在部署(在端口:-containerPort:8080)服务(如端口:-端口:80 targetPort:8080协议:TCP名称:http)和入口(在后端:serviceName:tomcat

  • 我正在为2个服务一起创建一个ALB,带有注释:merged。这行不通。我在日志中也看不到太多操作。我做错了什么?工作节点具有AWS文档中提到的ALB入口策略(还添加了以下策略)。Kubernetes并没有抱怨,但ingress服务并没有得到地址,也并没有创建ALB或目标组。 ALB控制器: ALB入口服务: IAM政策: 如您所见,没有可用的地址。

  • 我定义了一个StatefulSet,里面有一个容器,它会启动。列出了CPU限制和请求,但我从未为内存指定相同的限制。我现在正在运行pod,但我不知道它们占用了多少内存。不管是什么,它都太多了,所以我想降低它。我如何知道它是什么?

  • 我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url