【问题标题】:Spring Boot HTTP made secure (HTTPS) with Kubernetes IngressSpring Boot HTTP 使用 Kubernetes Ingress 确保安全(HTTPS)
【发布时间】:2020-05-06 17:38:58
【问题描述】:

我是 Kubernetes 和 GKE 的新手。我有一些用 Spring Boot 2 编写并从 GitHub 部署到 GKE 的微服务。我想让这些服务安全,我想知道是否可以在我的网关微服务上使用入口来确保入口点的安全。我使用 HTTPS 创建了一个入口,但似乎我的所有健康检查都失败了。

是否可以仅通过使用入口而不更改 Spring Boot 应用程序来使我的架构安全?

【问题讨论】:

    标签: spring spring-boot kubernetes google-kubernetes-engine


    【解决方案1】:

    是的,根据您的情况,可以使用 GKE 入口,有一个官方 guide 说明如何逐步执行此操作。

    此外,这里是guide 关于如何实施 Google 托管证书的分步说明。

    另外,我知道我的回答有些笼统,但我只能在不了解您的 GKE 基础架构(例如您用于所述证书的 DNS 名称等)的情况下为您提供这么多帮助。

    请记住,您必须直接在您的 GKE 基础架构上而不是在您的 GCP 端实现这一点或者在一段时间后停止工作。

    编辑:

    我将在这里假设几件事,由于我没有您的 Spring Boot 2 部署 yaml 文件,我将用 nginx 部署替换它。

    cert.yaml

    apiVersion: networking.gke.io/v1beta1
    kind: ManagedCertificate
    metadata:
      name: ssl-cert
    spec:
      domains:
        - example.com
    

    nginx.yaml

    apiVersion: "apps/v1"
    kind: "Deployment"
    metadata:
      name: "nginx"
      namespace: "default"
      labels:
        app: "nginx"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: "nginx"
      template:
        metadata:
          labels:
            app: "nginx"
        spec:
          containers:
          - name: "nginx-1"
            image: "nginx:latest"
    

    nodeport.yaml(请根据您的需要修改“targetPort:80”)

    apiVersion: "v1"
    kind: "Service"
    metadata:
      name: "nginx-service"
      namespace: "default"
      labels:
        app: "nginx"
    spec:
      ports:
      - protocol: "TCP"
        port: 80
        targetPort: 80
      selector:
        app: "nginx"
      type: "NodePort"
    

    ingress-cert.yaml

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: nginx-ingress
      annotations:
        networking.gke.io/managed-certificates: ssl-cert
    spec:
      backend:
        serviceName: nginx-service
        servicePort: 80
    

    请记住,假设您的 DNS 名称“example.com”指向您的负载均衡器外部 IP,创建和应用您的 SSL 证书可能需要一段时间。

    【讨论】:

    • 感谢您的回复。 DNS 名称是我当时想出来的,是适当的,我不拥有那个 DNS。我在创建 Ingress 时创建了一个新的 Google 托管证书,但我的所有后端都处于不健康状态。我认为这足以让 HTTPS 入口与 http 后端服务。我的下一步是什么?
    • 编辑了一些 yaml 文件的说明,至于为什么您的后端处于不健康状态,我不确定,因为我不了解您的 GCP 项目,但在这里进行疯狂猜测,我假设您的“targetPort: 80”使用了不正确的端口(这取决于您的 Spring 部署)和/或您的 Spring 部署正在回答与 HTTP 200 OK 代码不同的内容。
    • 感谢@Frank 分享这个。所以我有一个 Spring Boot 应用程序(实际上是一个 Spring Cloud Zuul 网关),它在服务器 8762 上进行侦听。Kubernetes 负载均衡器服务实际上将所有请求从端口 80 映射到 8762。经过测试,一切都可以通过 http 顺利运行。我的目标是让这项服务使用 https。健康检查(默认)确实命中了不正确的 / 路径,所以我将其更改为 /actuator/health (因为我在 spring boot 应用程序中有执行器依赖项)。我的入口仍然说我所有的后端服务都不健康。我应该给你什么信息?
    • 我可以为这个问题提供什么更多信息,以便一切都透明?
    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 2021-01-21
    • 2015-02-22
    • 2021-05-28
    • 2020-07-02
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多