- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个节点应用程序,它根据域名加载其数据。域配置了 CNAME,如 app.service.com
(这是节点应用程序)。
Node 应用程序看到请求域并向 API 发送请求以获取应用程序数据。
例如:domain.com
CNAME app.service.com
-> 然后节点应用程序向 api 请求 domain.com 数据
问题是为所有域设置 HTTPS(使用 letencrypt)。我认为 cert-manager 可以提供帮助,但不知道如何在无需手动更改每个新域的配置文件的情况下自动执行此操作。
或者有没有更好的方法在 Kubernetes 中实现这一目标?
最佳答案
支持多个域名和/或子域名的标准方法是使用一个 SSL 证书并实现 SAN(主题备用名称)。额外的域名一起存储在 SAN 中。所有 SSL 证书都支持 SAN,但并非所有证书颁发机构都会颁发多域证书。 Let's Encrypt 确实支持 SAN所以他们的证书将满足您的目标。
首先,您必须创建一个 job在我们的集群中,它使用一个图像来运行一个 shell 脚本。该脚本将启动一个 HTTP 服务,创建证书,并将它们保存到一个预定义的 secret 中。您的域和电子邮件是环境变量,因此请务必填写:
apiVersion: batch/v1
kind: Job
metadata:
name: letsencrypt-job
labels:
app: letsencrypt
spec:
template:
metadata:
name: letsencrypt
labels:
app: letsencrypt
spec:
containers:
# Bash script that starts an http server and launches certbot
# Fork of github.com/sjenning/kube-nginx-letsencrypt
- image: quay.io/hiphipjorge/kube-nginx-letsencrypt:latest
name: letsencrypt
imagePullPolicy: Always
ports:
- name: letsencrypt
containerPort: 80
env:
- name: DOMAINS
value: kubernetes-letsencrypt.jorge.fail # Domain you want to use. CHANGE ME!
- name: EMAIL
value: jorge@runnable.com # Your email. CHANGE ME!
- name: SECRET
value: letsencrypt-certs
restartPolicy: Never
apiVersion: v1
kind: Service
metadata:
name: letsencrypt
spec:
selector:
app: letsencrypt
ports:
- protocol: "TCP"
port: 80
apiVersion: v1
kind: Secret
metadata:
name: letsencrypt-certs
type: Opaque
# Create an empty secret (with no data) in order for the update to work
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: "kubernetes-demo-app-ingress-service"
spec:
tls:
- hosts:
- kubernetes-letsencrypt.jorge.fail # Your host. CHANGE ME
secretName: letsencrypt-certs # Name of the secret
rules:
/.well-known/*
通过 Ingress Controller 完成。条目并将其重定向到 letencrypt 服务。这更复杂,因为您还必须向作业添加健康路线,因此您只需通过 Nginx 部署重定向流量:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
default.conf: |
# Add upstream for letsencrypt job
upstream letsencrypt {
server letsencrypt:80 max_fails=0 fail_timeout=1s;
}
server {
listen 80;
# Redirect all traffic in /.well-known/ to letsencrypt
location ^~ /.well-known/acme-challenge/ {
proxy_pass http://letsencrypt;
}
}
$ kubectl get pods | grep ngi | awk '{print $1}' | xargs kubectl delete pods
$ kubectl get job letsencrypt-job
NAME DESIRED SUCCESSFUL AGE
letsencrypt-job 1 1 1d
$ kubectl describe secret letsencrypt-certs
Name: letsencrypt-certs
Namespace: default
Labels: <none>
Annotations:
Type: Opaque
Data
====
tls.crt: 3493 bytes
tls.key: 1704 bytes
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: "kubernetes-demo-app-ingress-service"
labels:
# Timestamp used in order to force reload of the secret
last_updated: "1494099933"
...
关于kubernetes - 在具有大量域的 kubernetes 应用程序上自动进行 Letencrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59693665/
我正在尝试设置我的 nginx 和 django 以便能够更新证书。 但是我的 webroot-plugin 出了点问题 在 Nginx 中: location ~ /.well-known {
我最近在我的 Ubuntu 服务器上安装了 Gitlab CE。我想要运行 Gitlab 的域是 https://git.mydomain.com (这是一个示例 URL),所以我更喜欢使用 Lets
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我有一个节点应用程序,它根据域名加载其数据。域配置了 CNAME,如 app.service.com (这是节点应用程序)。 Node 应用程序看到请求域并向 API 发送请求以获取应用程序数据。 例
我正在运行 aws lightsail、wordpress 网站。我正在尝试使用 bncert-tool 从 LetsEncrypt 获取 ssl 证书。我收到以下错误。 “54.253.145.89
我在 Nginx 中使用 Laravel Forge 部署了一个 Laravel 项目。 此应用程序有几个别名。 我正在尝试为每个别名颁发 ssl 证书,但出现以下错误: ERROR: Challen
我在获取 traefik 时遇到了一些问题生成 lets-encrypt带有 www. 的域的证书supdomain 作为单独的 SAN。我有其他具有相同配置的容器在此环境中工作。 (调试)日志非常冗
我正在尝试在 kubernetes 集群上设置 letencrypt cert-issuer。我的地形看起来像这样: resource "helm_release" "cert_manager" {
我是一名优秀的程序员,十分优秀!