Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl Https不适用于入口,CA根不受信任_Ssl_Kubernetes_Azure Aks - Fatal编程技术网

Ssl Https不适用于入口,CA根不受信任

Ssl Https不适用于入口,CA根不受信任,ssl,kubernetes,azure-aks,Ssl,Kubernetes,Azure Aks,我一直在遵循以下关于AKS设置的教程:。 但现在我正努力让HTTPS正常工作 这就是我所做的 我已经通过以下方式生成了证书和密钥 在cmd中运行它 bash generate-wildcard-certificate.sh mydomain.somenumbers.westeurope.aksapp.io 将生成2个文件: mydomain.somenumbers.westeurope.aksapp.io.crt mydomain.somenumbers.westeurope.aksapp.i

我一直在遵循以下关于AKS设置的教程:。 但现在我正努力让HTTPS正常工作

这就是我所做的 我已经通过以下方式生成了证书和密钥 在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创建秘密tls入口加密身份验证--密钥mydomain.somenumbers.westeurope.aksapp.io.crt--证书mydomain.somenumbers.westeurope.aksapp.io.crt

将该秘密添加到我的
ingres.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签名的证书要提供的所有安全属性。例如,当网站所有者使用自签名证书提供服务时,访问该网站的用户将在其浏览器中看到警告

要解决此问题,您可以从受信任的CA购买有效的证书,或者使用Let's Encrypt生成证书

使用证书管理器进行加密 证书管理器构建在Kubernetes之上,在Kubernetes API中引入证书颁发机构和证书作为一级资源类型。这使得向在Kubernetes集群中工作的开发人员提供“证书即服务”成为可能

Let's Encrypt是一家由Internet Security Research Group运营的非营利性证书颁发机构,免费为传输层安全加密提供X.509证书。证书有效期为90天,在此期间,可随时续签。 我相信您已经安装了NGINX入口并正在工作

先决条件: -安装和工作 -安装和工作

证书管理器安装

注意:在GKE(Google Kubernetes引擎)上运行时,在创建这些资源时可能会遇到“权限被拒绝”错误。这是GKE处理RBAC和IAM权限方式的细微差别,因此在运行上述命令之前,您应该将自己的权限“提升”到“集群管理员”的权限。如果已运行上述命令,则应在提升权限后再次运行这些命令:

按照安装步骤进行操作,或仅使用HELM 3.0和以下命令:

$kubectl创建命名空间证书管理器
$helm repo添加jetstackhttps://charts.jetstack.io
$helm回购更新
$kubectl apply--validate=false-fhttps://github.com/jetstack/cert-manager/releases/download/v0.14.1/cert-manager-legacy.crds.yaml
为Let's Encrypt创建
CLusterIssuer
:将以下内容保存在名为
letsencrypt production.yaml的新文件中:

注意:用您的有效电子邮件替换

apiVersion:certmanager.k8s.io/v1alpha1 种类:聚类分析 元数据: 标签: 名称:letsencrypt产品 名称:letsencrypt产品 规格: 顶点: 电邮: http01:{} privateKeySecretRef: 名称:letsencrypt产品 服务器:'https://acme-v02.api.letsencrypt.org/directory'
应用以下配置:

kubectl apply-f letsencrypt production.yaml

使用Let's Encrypt作为默认CA安装证书管理器:

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——名称空间证书管理器
名称就绪状态重新启动
cert-manager-5c6866597-zw7kh 1/1运行0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1运行0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1运行0 2m
使用证书管理器 在入口规范中应用此注释:

cert-manager.io/cluster-issuer: "letsencrypt-prod"
应用证书后,证书管理器将为
主机:
中配置的域生成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 }}

如果有帮助,请告诉我。

您使用的是自签名证书,因为您没有有效的证书。您提到的脚本在创建证书时显示此警告。自签名证书仅用于开发/测试目的。。。如果您需要有效的证书,我建议您查看Let's Encrypt and cert manager,如果这是您想要的,我将很乐意帮助您并发布一个答案来设置证书管理器/Let's Encrypt以在您的应用程序中拥有有效的证书。感谢您的回复,在互联网上搜索之后,我发现事情会是这样的。我现在正在学习下面的教程:但是我一直停留在
创建证书对象上
你能帮我吗?为什么你会结巴?我想你可以使用nginx ingres实现自己的证书管理器。你需要aks提供的静态ip和负载均衡器吗?我已经让它工作了,但这个解决方案看起来或多或少像我做的,所以我接受了你的答案:)