1

我已经按如下方式安装了Harbor:

helm install hub harbor/harbor \
  --version 1.3.2 \
  --namespace tool \
  --set expose.ingress.hosts.core=hub.service.example.io \
  --set expose.ingress.annotations.'kubernetes\.io/ingress\.class'=istio \
  --set expose.ingress.annotations.'cert-manager\.io/cluster-issuer'=letsencrypt-prod \
  --set externalURL=https://hub.service.example.io \
  --set notary.enabled=false \
  --set secretkey=secret \
  --set harborAdminPassword=pw  

一切都已启动并正在运行,但该页面无法通过https://hub.service.example.io. 这里出现同样的问题为什么css和png不可访问?但是如何*在 Helm 中设置通配符?

更新

Istio 支持入口网关。例如,这在没有 Gateway 和 VirtualService 定义的情况下工作:

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes-first
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: hello-kubernetes-first
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-first
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-first
  template:
    metadata:
      labels:
        app: hello-kubernetes-first
    spec:
      containers:
        - name: hello-kubernetes
          image: paulbouwer/hello-kubernetes:1.8
          ports:
            - containerPort: 8080
          env:
            - name: MESSAGE
              value: Hello from the first deployment!
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: istio
  name: helloworld-ingress
spec:
  rules:
    - host: "hw.service.example.io"
      http:
        paths:
          - path: "/*"
            backend:
              serviceName: hello-kubernetes-first
              servicePort: 80
---
4

2 回答 2

1

我会说它不适用于 ingress 和 istio。

正如这里提到的

简单的入口规范,包括主机、TLS 和基于精确路径的匹配,无需路由规则即可开箱即用。但是,请注意,入口资源中使用的路径不应包含任何 . 人物。

例如,以下入口资源匹配对 example.com 主机的请求,其中 /helloworld 作为 URL。

$ kubectl create -f - <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: simple-ingress
annotations:
  kubernetes.io/ingress.class: istio
spec:
rules:
- host: example.com
  http:
    paths:
    - path: /helloworld
      backend:
        serviceName: myservice
        servicePort: grpc
EOF

但是,以下规则将不起作用,因为它们在路径和 ingress.kubernetes.io 注释中使用正则表达式:

$ kubectl create -f - <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: this-will-not-work
annotations:
  kubernetes.io/ingress.class: istio
  # Ingress annotations other than ingress class will not be honored
  ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
  http:
    paths:
    - path: /hello(.*?)world/
      backend:
        serviceName: myservice
        servicePort: grpc
EOF

我假设您的 hello-world 正在工作,因为只有 1 个注释是入口类。

如果您在此处查看harbor 的注释,当您想在 istio 中使用 ingress 时可能会出现问题。


但是如何在 Helm 中设置通配符 *?

通配符在这里无关。正如我在这个答案中提到的,您可以使用通配符或其他路径,这做得很好。看看这里的入口路径。

于 2020-05-05T08:14:37.190 回答
0

https://github.com/goharbor/harbor-helm/blob/master/templates/ingress/ingress.yaml#L5

如果你看这里,他们将路径硬编码为几个入口选项。Envoy/istio 不是其中之一。但是,您可能很幸运——将expose.ingress.controller 设置为“gce”似乎可以按照您需要的方式设置路径。(我从来没有用过 gce,也许他们甚至用过 istio?)

编辑-原始答案如下。显然,您可以在 istio 中启用一个入口控制器。上面绝对没有文档,但我应该期待什么?

不过,就您而言,掌舵不是您的问题。istio 不使用ingress对象,它使用“网关”和“虚拟服务”。您无法使用 kubernetes.io/ingress.class 注释将应用程序配置为使用 istio 入口系统。

(至少,这是我的经验,我在他们的文档中找不到任何与此相矛盾的东西,但完全有可能有一个 istio 入口控制器

于 2020-05-04T16:24:48.600 回答