【问题标题】:In Kubernetes, how to setup multiple hosts in one ingress with let's encrypt certificates在 Kubernetes 中,如何使用 let\'s encrypt 证书在一个入口中设置多个主机
【发布时间】:2022-11-09 15:05:22
【问题描述】:

我已经设置了在 Kubernetes 上运行的后端和前端服务。前端为www.<myDomain>.com,后端为api.<myDomain>.com

我需要公开和保护这两个服务。我希望使用一个入口。我想使用 let's encrypt + cert manager 的免费证书。我猜<myDomain>.com 的证书应该涵盖www.api.

很正常的用例,对吧?但是当这些正常的东西放在一起时,我无法弄清楚组合的 yaml。我能够获得单一服务,www.<myDomain>.com 与 https 一起使用。当我尝试添加 api.<myDomain>.com 时,事情不起作用

我正在使用 GKE,但这似乎不是与平台相关的问题。现在创建入口需要很长时间。以下事件已被反复尝试

Error syncing to GCP: error running load balancer syncing routine: loadbalancer <some id here> does not exist: googleapi: Error 404: The resource 'projects/<project>/global/sslCertificates/<some id here>' was not found, notFound
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    kubernetes.io/ingress.class: gce
    kubernetes.io/ingress.allow-http: "true"
    cert-manager.io/issuer: letsencrypt-staging
spec:
  tls:
    - secretName: web-ssl
      hosts:
        - <myDomain>.com
  rules:
    - host: "www.<myDomain>.com"
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: angular-service
                port:
                  number: 80
    - host: "api.<myDomain>.com"
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: spring-boot-service
                port:
                  number: 8080

【问题讨论】:

    标签: kubernetes https kubernetes-ingress lets-encrypt cert-manager


    【解决方案1】:

    我想到了。我为同一个域使用了不同的路径来解决这个问题。我并不是说 2 个域不起作用。还有一些其他配置,如 CORS 相关。但是单域不同的路径对我来说是一条快乐的道路。这是我在入口中使用的规则部分。

    - host: "www.<myDomain>.com"
          http:
            paths:
              - pathType: Prefix
                path: "/"
                backend:
                  service:
                    name: angular-service
                    port:
                      number: 80
              - pathType: Prefix
                path: "/api"
                backend:
                  service:
                    name: spring-boot-service
                    port:
                      number: 8080
    
    

    【讨论】:

      【解决方案2】:

      我遇到了和你一样的要求。 从

        tls:
      - secretName: web-ssl
        hosts:
          - <myDomain>.com
      

      改成

            tls:
              - hosts:
                - www.<myDomain>.com
                secretName: web-ssl
              - hosts:
                - api.<myDomain>.com
                secretName: web-ssl
      

      帮我解决问题!

      【讨论】:

        猜你喜欢
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多