kubernetes - 如何在 Kubernetes 中通过 HTTPS 公开应用程序(或服务)?
问题描述
在 kubernetes 中,为 Nginx 应用程序创建了使用“LoadBalancer”类型的部署和服务。代码在这里。该应用程序可使用外部 IP 10.120.xy访问。该应用程序不是通过 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
解决方案
我建议您尝试使用此安装 cert-manager,然后您可以按照此 stackoverflow 帖子进行操作。
在 TLS 中添加密钥名称后,证书将进入就绪状态,请注意,您无需创建该密钥,它将自动创建。在 acme 质询验证后,证书将达到就绪状态。
请使用
apiVersion: cert-manager.io/v1alpha2
在 clusterissuer 中,如果该 stackoverflow 帖子中存在的 clusterIssuer 的 apiVersion 不可接受
推荐阅读
- python - 列表索引超出范围,我该如何解决?
- python - 在 for 循环中使用 break 和 continue 来遍历字典
- javascript - 按时刻从字符串日期转换为 unix 时间戳
- eclipse - 尝试安装最黑暗的主题后如何在 Ubuntu 上修复 Eclipse?
- reactjs - 使用 Firestore 快照侦听器接收 React 中的聊天列表
- vue.js - 尝试动态创建配置屏幕输入到创建相同输入集的 V-For
- javascript - 除了这个
- python - paho.mqtt.python 无法传递用户名和密码
- latex - TexStudio - 我的引文出现奇怪的字符
- snowflake-cloud-data-platform - 将变量传递给雪花过程