![](/img/trans.png)
[英]root ca not trusted - OCSP responder with nginx https server
[英]Https not working for Ingress, CA Root not trusted
我一直在关注我的 AKS 设置的以下教程: https : //github.com/Azure/phippyandfriends 。 但现在我正在努力让 HTTPS 正常工作。
我通过以下shell 脚本在 cmd 中运行它生成了一个证书和密钥
bash generate-wildcard-certificate.sh mydomain.somenumbers.westeurope.aksapp.io
这会生成 2 个文件:
mydomain.somenumbers.westeurope.aksapp.io.crt
mydomain.somenumbers.westeurope.aksapp.io.key
然后我使用以下命令创建了一个秘密:
kubectl create secret tls ingress-crypto-auth --key mydomain.somenumbers.westeurope.aksapp.io.crt --cert mydomain.somenumbers.westeurope.aksapp.io.crt
将秘密添加到我的ingress.yaml
文件中:
{{ if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
spec:
tls:
- hosts:
- {{ .Values.ingress.basedomain }}
secretName: ingress-crypto-auth
rules:
- host: {{ .Release.Name }}.{{ .Values.ingress.basedomain }}
http:
paths:
- path: /
backend:
serviceName: {{ template "fullname" . }}
servicePort: {{ .Values.service.externalPort }}
{{ end }}
似乎我的证书已加载,但出现以下错误:
此 CA 根证书不受信任,因为它不在受信任的根证书颁发机构存储中。
我做错了什么吗? 更重要的是,我如何让它工作? 我不在乎临时项目怎么样
这是因为您使用的是自签名证书。
自签名证书是证书不是由一个签名的证书颁发机构(CA)。 这些证书很容易制作,而且不花钱。 但是,它们并没有提供 CA 签署的证书旨在提供的所有安全属性。 例如,当网站所有者使用自签名证书提供HTTPS服务时,访问该网站的人将在其浏览器中看到警告。
要解决此问题,您可以从受信任的 CA 购买有效证书,或使用 Let's Encrypt 生成它。
cert-manager建立在 Kubernetes 之上,引入了证书颁发机构和证书作为 Kubernetes API 中的一流资源类型。 这使得向在 Kubernetes 集群中工作的开发人员提供“证书即服务”成为可能。
Let's Encrypt是一个由 Internet 安全研究小组运营的非营利性证书颁发机构,它免费提供用于传输层安全加密的 X.509 证书。 该证书的有效期为 90 天,在此期间可以随时更新。 我假设您已经安装并运行了 NGINX 入口。
先决条件: - NGINX Ingress安装并运行 - HELM 3.0安装并运行
证书管理器安装
注意:在 GKE (Google Kubernetes Engine) 上运行时,您可能会在创建其中一些资源时遇到“权限被拒绝”错误。 这是 GKE 处理 RBAC 和 IAM 权限方式的细微差别,因此您应该在运行上述命令之前将自己的权限“提升”为“集群管理员”的权限。 如果你已经运行了上面的命令,你应该在提升你的权限后再次运行它们:
按照官方文档进行安装,或者只使用带有 followe 命令的 HELM 3.0:
$ kubectl create namespace cert-manager
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.1/cert-manager-legacy.crds.yaml
为 Let's Encrypt 创建CLusterIssuer
:将以下内容保存在名为letsencrypt-production.yaml
的新文件中:
注意:将
<EMAIL-ADDRESS>
替换为您的有效电子邮件。
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
labels:
name: letsencrypt-prod
name: letsencrypt-prod
spec:
acme:
email: <EMAIL-ADDRESS>
http01: {}
privateKeySecretRef:
name: letsencrypt-prod
server: 'https://acme-v02.api.letsencrypt.org/directory'
应用配置:
kubectl apply -f letsencrypt-production.yaml
使用 Let's Encrypt 作为默认 CA 安装 cert-manager:
helm install cert-manager \
--namespace cert-manager --version v0.8.1 jetstack/cert-manager \
--set ingressShim.defaultIssuerName=letsencrypt-prod \
--set ingressShim.defaultIssuerKind=ClusterIssuer
验证安装:
$ kubectl get pods --namespace cert-manager NAME READY STATUS RESTARTS AGE cert-manager-5c6866597-zw7kh 1/1 Running 0 2m cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
在您的入口规范中应用此注释:
{{ if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- {{ .Values.ingress.basedomain }}
secretName: ingress-crypto-auth
rules:
- host: {{ .Release.Name }}.{{ .Values.ingress.basedomain }}
http:
paths:
- path: /
backend:
serviceName: {{ template "fullname" . }}
servicePort: {{ .Values.service.externalPort }}
{{ end }}
应用 cert-manager 后,将为Host:
配置的域生成 tls 证书。
{{ if .Values.ingress.enabled }} apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: {{ template "fullname" . }} labels: app: {{ template "fullname" . }} chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" annotations: kubernetes.io/ingress.class: addon-http-application-routing cert-manager.io/cluster-issuer: "letsencrypt-prod" spec: tls: - hosts: - {{ .Values.ingress.basedomain }} secretName: ingress-crypto-auth rules: - host: {{ .Release.Name }}.{{ .Values.ingress.basedomain }} http: paths: - path: / backend: serviceName: {{ template "fullname" . }} servicePort: {{ .Values.service.externalPort }} {{ end }}
如果这有帮助,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.