我正在尝试在 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
我的问题似乎与 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
解决了这个问题。