我们正在1.12.5-gke.10群集节点上运行Istio 1.1.3。
我们使用certmanager来管理我们的加密证书。
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: certs.ourdomain.nl
namespace: istio-system
spec:
secretName: certs.ourdomain.nl
newBefore: 360h # 15d
commonName: operations.ourdomain.nl
dnsNames:
- operations.ourdomain.nl
issuerRef:
name: letsencrypt
kind: ClusterIssuer
acme:
config:
- http01:
ingressClass: istio
domains:
- operations.ourdomain.nl
接下来,我们看到acme后端,服务(节点端口和入口)已部署。入口(自动生成)如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: istio
generateName: cm-acme-http-solver-
generation: 1
labels:
certmanager.k8s.io/acme-http-domain: "1734084804"
certmanager.k8s.io/acme-http-token: "1476005735"
name: cm-acme-http-solver-69vzw
namespace: istio-system
ownerReferences:
- apiVersion: certmanager.k8s.io/v1alpha1
blockOwnerDeletion: true
controller: true
kind: Certificate
name: certs.ourdomain.nl
uid: 751011d2-4fc8-11e9-b20e-42010aa40101
spec:
rules:
- host: operations.ourdomain.nl
http:
paths:
- backend:
serviceName: cm-acme-http-solver-fzk8q
servicePort: 8089
path: /.well-known/acme-challenge/dnrcr-LRRMdXhBaUefjqpHQx8ytYuk-feEfXu9gW-Ck
status:
loadBalancer: {}
但是,当我们尝试访问url operation.ourdomain.nl /.well-known/acme-challenge/dnrcr-LRRMdXhBaUefjqpHQx8ytYuk-feEfXu9gW-Ck时,我们会得到404。
我们确实为istio提供了一个负载均衡器:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
labels:
app: istio-ingress
chart: gateways-1.1.0
heritage: Tiller
istio: ingress
release: istio
name: istio-ingress
namespace: istio-system
spec:
selector:
app: istio-ingress
servers:
- hosts:
- operations.ourdomain.nl
#port:
# name: http
# number: 80
# protocol: HTTP
#tls:
# httpsRedirect: true
- hosts:
- operations.ourdomain.nl
port:
name: https
number: 443
protocol: HTTPS
tls:
credentialName: certs.ourdomain.nl
mode: SIMPLE
privateKey: sds
serverCertificate: sds
这个有趣的article很好地了解了应对挑战的方式。为了进行测试,我们删除了端口80,并在自定义网关中重定向到https。我们添加了自动生成的k8s网关,仅在端口80上监听。
Istio应该为acme挑战创建虚拟服务。这似乎正在发生,因为现在,当我们请求acme-challenge URL时,我们收到503:上游连接错误或在标头之前断开连接/重置。我相信这意味着请求到达网关并由虚拟服务匹配,但是没有服务/运行状况良好的设备可将流量还原到该服务。
我们在istio-pilot中确实看到了一些有趣的日志记录:
“ ProxyStatus”:{“ endpoint_no_pod”: {“ cm-acme-http-solver-l5j2g.istio-system.svc.cluster.local”: {“消息”:“ 10.16.57.248”}
我已经仔细检查过,上面提到的服务确实有一个正在暴露的豆荚。因此,我不确定此行是否与此问题相关。
acme挑战豆荚没有istio侧车。这可能是问题吗?如果是这样:为什么它显然适用于others