如何通过HTTPS在kubernetes中公开应用程序(或服务)?

时间:2019-11-13 20:36:44

标签: kubernetes openssl kubernetes-ingress nginx-ingress

在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入口控制器,需要为应用程序创建入口。我在创建Ingress时遇到问题,需要创建tls.crt和tls.key,然后使用以下用于Ingress的命令创建密钥。

  • 我不知道传递给变量HOST和 HOST名称将产生什么意义?
  • 如何以及将使用该应用程序的外部名称是什么 无障碍?我是否需要DNS条目来解析要获取的名称 该应用程序?

通常,将服务器名用于服务器证书(如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

1 个答案:

答案 0 :(得分:0)

我建议您尝试this进行证书管理器安装,此后您可以按照this stackoverflow post进行操作。

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

善用

apiVersion: cert-manager.io/v1alpha2

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