Kubeflow+Istio+cert-manager http-01 挑战传播:错误的状态码“404”,预期为“200”

问题描述 投票:0回答:1

我正在尝试在 AKS 上部署 ssl secure kubeflow v1.6。部署使用

Cert-manager v1.10.1
Istio v1.16.0
。 acme-solver 服务正在使用端口 8089,但无法从集群外部或内部访问它。

简而言之,请求

domain.com/.well-known/acme-challenge/token
应该得到包含验证令牌的 200 响应,但问题是它无法访问端口 8089 上集群内运行的服务,因此它得到错误 404。证书管理器默认创建入口以允许此请求,但它不起作用。

这是由 acme-solver 创建的

Ingress
资源

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: istio
    nginx.ingress.kubernetes.io/whitelist-source-range: 0.0.0.0/0,::/0
  generateName: cm-acme-http-solver-
  generation: 2
  labels:
    acme.cert-manager.io/http-domain: "700646687"
    acme.cert-manager.io/http-token: "903286350"
    acme.cert-manager.io/http01-solver: "true"
  name: cm-acme-http-solver-m5km5
  namespace: istio-system
  ownerReferences:
  - apiVersion: acme.cert-manager.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: Challenge
    name: example-domain-com-wq9x4-635963339-3112361122
    uid: a714c9e7-4152-4a67-849a-770fc8d049a2
  resourceVersion: "22275"
  uid: dd653c5b-8bcf-4275-a820-df1020005a5f
spec:
  rules:
  - host: example.domain.com
    http:
      paths:
      - backend:
          service:
            name: cm-acme-http-solver-8bd7d
            port:
              number: 8089
        path: /.well-known/acme-challenge/6lN1QQNyGRfN9t9zVd8dxM9FWmWe13qDwF6owzXJ-Vk
        pathType: Exact
status:
  loadBalancer:
    ingress:
    - ip: 52.224.73.90

我试图在

istio-system
命名空间中创建一个 virtualService 或另一个 Ingress,但也没有用。 这是我尝试申请的虚拟服务;

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-virtual-service
  namespace: istio-system
spec:
  hosts:
    - example.domain.com
  gateways:
    - istio-ingressgateway
  http:
    - match:
        - uri:
            prefix: "/.well-known/acme-challenge/"
      route:
        - destination:
            host: cm-acme-http-solver.istio-system.svc.cluster.local
            port:
              number: 8089
kubernetes azure-aks istio kubeflow cert-manager
1个回答
0
投票

我的问题似乎与 istio 或网络无关。我只需要添加前缀

.well-know/
即可被 kubeflow 中的身份验证服务跳过。它阻止了
domain.com/.well-known/acme-challenge/token
url,因此求解器 pod 无法在未经身份验证的情况下访问它。所以为了克服这个问题,在路径
.well-known
中找到的
SKIP_AUTH_URI
参数中添加
manifests-1.6.1/common/oidc-authservice/base/params.env
解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.