【问题标题】:how to expose the application (or service) via HTTPS in kubernetes?如何在 Kubernetes 中通过 HTTPS 公开应用程序(或服务)?
【发布时间】:2020-03-09 17:32:12
【问题描述】:

在 kubernetes 中,为 Nginx 应用程序创建了使用“LoadBalancer”类型的部署和服务。代码是here。该应用程序可使用外部 IP 10.120.x.y 访问。该应用程序不是通过 HTTPS 公开的,它是不安全的。

root@desktop:~/github/nginx-app# kubectl get svc
NAME                                       TYPE           CLUSTER-IP       EXTERNAL-IP                    PORT(S)                                                                   AGE
nginx-cms-service                          LoadBalancer   10.100.x.y   10.120.x.y,100.x.y.z   80:30596/TCP

我需要在入口中使用 TLS 通过 HTTPS 公开应用程序(显然是它的服务)(不确定这是否是通过 https 公开应用程序的正确方法) 我部署了 kubernetes nginx 入口控制器,需要为应用程序创建入口。我在创建入口时卡住了,需要创建 tls.crt 和 tls.key 然后使用下面的入口命令创建秘密。

  • 我不知道传递给变量 HOST 和的值是什么 HOST 名称的意义是什么?
  • 应用程序的外部名称是什么? 无障碍?我是否需要一个 DNS 条目来解析要访问的名称 申请?

一般来说,将 servername 用于服务器证书(如 SERVERNAME.key、SERVERNAME.crt)是有意义的,其中 SERVERNAME 是服务器的实际主机名。证书是为入口或服务或应用程序创建的吗?

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ${KEY_FILE} -out ${CERT_FILE} -subj "/CN=${HOST}/O=${HOST}"
kubectl create secret tls ${CERT_NAME} --key ${KEY_FILE} --cert ${CERT_FILE}

我的 ingress.yaml 具有 spec.rules.host 的值:nginx-cms-app.com,因此使用如下名称。这是正确的吗?

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx-cms-app.com.key -out nginx-cms-app.com.crt -subj "/CN=nginx-cms-app.com/O=nginx-cms-app.com"
kubectl create secret tls nginx-cms-app.com --key nginx-cms-app.com.key --cert nginx-cms-app.com.crt

【问题讨论】:

    标签: kubernetes openssl kubernetes-ingress nginx-ingress


    【解决方案1】:

    我建议您尝试this 安装证书管理器,然后您可以关注this stackoverflow post

    在 TLS 中添加密钥名称后,证书将进入就绪状态,请注意,您无需创建该密钥,它将自动创建。在 acme 质询验证后,证书将进入就绪状态。

    请使用

    apiVersion: cert-manager.io/v1alpha2
    

    在 clusterissuer 中,如果该 stackoverflow 帖子中存在的 clusterIssuer 的 apiVersion 不可接受

    【讨论】:

    • 我无法在 kubernetes 集群 v1.12 中使用 helm 安装 cert-manager。我的是1.12。寻找此处复制的“caBundle”时出现验证错误 (github.com/get2arun/logs/blob/master/…)。这个问题在这里讨论 (github.com/helm/helm/issues/6883#issuecomment-550463352) 目前,我无法升级集群。还有其他方法可以在入口中设置 HTTPS 吗?
    • 尝试使用 kube-lego
    • 你了解 kube-lego 了吗?
    • 我发现,HTTPS 可以通过入口实现,所以尝试部署入口和公开服务,但在 (stackoverflow.com/questions/58881789/…) 也有问题,有一个问题,我必须在哪里使用这个证书?需要有入口吗?或使用已经是服务的服务类型 LoadBalancer。我相信证书是用于入口的。如何使用现有的服务类型 LoadBalancer(insecure) 实现 https?对于 cert-manager,必须使用 kube-lego,因为集群 1.12.4 中没有支持,并且会回来。
    猜你喜欢
    • 1970-01-01
    • 2020-04-07
    • 2020-08-18
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2022-12-12
    相关资源
    最近更新 更多