Istio:ACME挑战的入口无法正常工作(503)

时间:2019-04-16 12:44:48

标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress istio

我们正在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

0 个答案:

没有答案