不知道为什么我会得到假证书,即使证书是由我们使用certmanager加密正确颁发的
安装程序在阿里云ECS控制台上运行,其中一个Kube master和一个cube minion组成一个Kubernetes集群。
服务详情
root@kube-master:~# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h20m
my-nginx ClusterIP 10.101.150.247 <none> 80/TCP 77m
Pod详细信息
root@kube-master:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
my-nginx-6cc48cd8db-n6scm 1/1 Running 0 46s app=my-nginx,pod-template-hash=6cc48cd8db
已部署舵手证书管理器
root@kube-master:~# helm ls
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
cert-manager 1 Tue Mar 12 15:29:21 2019 DEPLOYED cert-manager-v0.5.2 v0.5.2 kube-system
kindred-garfish 1 Tue Mar 12 17:03:41 2019 DEPLOYED nginx-ingress-1.3.1 0.22.0 kube-system
正确签发证书
root@kube-master:~# kubectl describe certs
Name: tls-prod-cert
Namespace: default
Labels: <none>
Annotations: <none>
API Version: certmanager.k8s.io/v1alpha1
Kind: Certificate
Metadata:
Creation Timestamp: 2019-03-12T10:26:58Z
Generation: 2
Owner References:
API Version: extensions/v1beta1
Block Owner Deletion: true
Controller: true
Kind: Ingress
Name: nginx-ingress-prod
UID: 5ab11929-44b1-11e9-b431-00163e005d19
Resource Version: 17687
Self Link: /apis/certmanager.k8s.io/v1alpha1/namespaces/default/certificates/tls-prod-cert
UID: 5dad4740-44b1-11e9-b431-00163e005d19
Spec:
Acme:
Config:
Domains:
zariga.com
Http 01:
Ingress:
Ingress Class: nginx
Dns Names:
zariga.com
Issuer Ref:
Kind: ClusterIssuer
Name: letsencrypt-prod
Secret Name: tls-prod-cert
Status:
Acme:
Order:
URL: https://acme-v02.api.letsencrypt.org/acme/order/53135536/352104603
Conditions:
Last Transition Time: 2019-03-12T10:27:00Z
Message: Order validated
Reason: OrderValidated
Status: False
Type: ValidateFailed
Last Transition Time: <nil>
Message: Certificate issued successfully
Reason: CertIssued
Status: True
Type: Ready
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreateOrder 27s cert-manager Created new ACME order, attempting validation...
Normal IssueCert 27s cert-manager Issuing certificate...
Normal CertObtained 25s cert-manager Obtained certificate from ACME server
Normal CertIssued 25s cert-manager Certificate issued successfully
入口详细信息
root@kube-master:~# kubectl describe ingress
Name: nginx-ingress-prod
Namespace: default
Address:
Default backend: my-nginx:80 (192.168.123.202:80)
TLS:
tls-prod-cert terminates zariga.com
Rules:
Host Path Backends
---- ---- --------
* * my-nginx:80 (192.168.123.202:80)
Annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: true
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 7m13s nginx-ingress-controller Ingress default/nginx-ingress-prod
Normal CreateCertificate 7m8s cert-manager Successfully created Certificate "tls-prod-cert"
Normal UPDATE 6m57s nginx-ingress-controller Ingress default/nginx-ingress-prod
Letsencrypt Nginx生产定义
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress-prod
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kubernetes.io/tls-acme: 'true'
labels:
app: 'my-nginx'
spec:
backend:
serviceName: my-nginx
servicePort: 80
tls:
- secretName: tls-prod-cert
hosts:
- zariga.com
如果你确信一切都设置正确,但它仍然不起作用,试试这个。
编辑您的nginx控制器的部署。为什么?因为,如果它在部署的命名空间中找不到秘密,Nginx控制器会部署它自己的证书(假证书)。不知道这一点(我是游戏新手)花了我几天的时间。
因此,要么更改Nginx入口控制器所在的名称空间并获取部署的名称,然后:
kubectl edit deployment nginx-ingress-ingress-nginx-controller -n nginx-ingress
或者,如果该名称空间中只有一个部署,则可以执行以下操作
kubectl edit deployment
您应该处于nginx控制器部署的编辑模式。查找截面:spec--
spec:
containers:
- args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/nginx-ingress-ingress-nginx-controller
- --election-id=ingress-controller-leader
- --ingress-class=nginx
- --configmap=$(POD_NAMESPACE)/nginx-ingress-ingress-nginx-controller
- --validating-webhook=:8443
- --validating-webhook-certificate=/usr/local/certificates/cert
- --validating-webhook-key=/usr/local/certificates/key
- --default-ssl-certificate=app-namespace/letsencrypt-cert-prod
如果您的nginx控制器没有找到默认证书(如上所述),您可以添加要使用的默认证书,因此它将通过添加以下内容在命名空间中搜索机密:
--default-ssl-certificate=your-cert-namespace/your-cert-secret
your-cert-namespace:您的证书秘密是your-cert-Secret的命名空间:包含秘密的证书的名称
保存并关闭编辑器后,应该对其进行更新。然后检查cert manager pod的日志:
kubectl logs cert-manager-xxxpodxx-abcdef -n cert-manager
确保一切正常。
如果所有资源都部署在同一命名空间中,则可能不会出现此问题。
如果您使用clusterissuer URL作为登台URL,有时可能会发生这种情况。
检查发卡机构中设置的letsencrypt url。yaml或clusterissuer。yaml并将其更改为生产url:https://acme-v02.api.letsencrypt.org/directory
我曾经遇到过同样的问题,将url更改为生产url解决了这个问题。
还要检查您使用的入口tls机密是否正确。
实际群集颁发者应类似于生产:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: dev-clusterissuer
spec:
acme:
email: harsh@example.com
privateKeySecretRef:
name: dev-clusterissuer
server: https://acme-v02.api.letsencrypt.org/directory # <----check this server URL it is for Prod and use this only
solvers:
- http01:
ingress:
class: nginx
如果您使用的是服务器:https://acme-staging-v02.api.letsencrypt.org/directory您将面临问题,最好将其替换为服务器:https://acme-v02.api.letsencrypt.org/directory
也许对遇到类似问题的人会有所帮助。对我来说,一个忘记在Inete yaml文件中为规则
和tls
部分指定主机名。复制主机名后,它开始使用正确的证书进行响应。
例子:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-web-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- my.host.com # <----
secretName: tls-secret
rules:
- host: my.host.com # <----
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: my-nginx
servicePort: 80
我使用nginx入口控制器在GKE上设置了一个新的kubernetes集群。TLS不起作用,它在使用假证书。 有很多配置细节,所以我做了一个回购https://github.com/jobevers/test_ssl_ingress 简而言之,步骤是 创建一个没有GKE负载均衡器的新集群 用我的密钥和证书创建一个tls秘密 创建一个nginx入口部署/pod 创建入口控制器 nginx-ingre
让我们Encrypt通过IdenTrust交叉签名得到他们的中间,这应该是个好消息。但是,我在这个命令的输出中找不到这两个: 我知道可以在每台机器上手动添加受信任的CA,但由于我的应用程序应该是免费下载和可执行的,不需要任何进一步的配置,所以我正在寻找“开箱即用”的解决方案。你有好消息告诉我吗?
我们已经建立了一个新的入口路由,需要TLS证书身份验证,并将其放置在自己的子域中,但我们发现证书管理器无法为其颁发证书。 使用此处提供的示例,我们生成CA证书和CA密钥,然后配置客户端证书:https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/auth/client-certs 在日志中,我可以看到所有请求都返回
我正在云中的AWS EKS服务上运行我的工作负载。我可以看到没有默认的入口控制器可用(因为它可用于GKE),我们必须选择第三方。 我决定使用Traefik。在跟踪文档和其他资源(像这样)之后,我觉得使用Traefik作为IngresController不会自动在云中创建LoadBalancer。我们必须手动完成它来设置所有内容。 如何使用Traefik作为Kubernetes入口,就像其他入口控制
我们正在GKE(谷歌kubernetes引擎)上运行一个API服务器。我们使用Google云endpoint和API密钥处理授权。我们将每个API密钥上的某些IP地址列为白名单。为了做到这一点,我们必须将负载平衡器转换为入口控制器,以公开我们的API服务器。IP白名单不适用于loadbalancer服务。现在,我们有一个类似以下内容的入口设置:
我在RedHat EC2实例上安装了Minikube v1.3.1以进行一些测试。 由于nginx-ingress-控制器默认使用的端口已经在使用中,我正在尝试在部署中更改它们,但没有结果。有人能建议如何做吗? 如何知道端口已在使用? 当我使用命令kubectl-n kube system get deployment | grep nginx列出系统吊舱时,我得到: nginx入口控制器0/1