Как сделать порт доступным за входом istio? - PullRequest
1 голос
/ 04 мая 2020

Я установил 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 поддерживает входной шлюз. Это, например, работает без определения шлюза и 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
---

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Я бы сказал, что он не будет работать с входом и istio.

Как уже упоминалось здесь

Простые спецификации входа, с хостом, TLS и совпадения на основе точного пути будут работать из коробки без необходимости правил маршрута. Однако обратите внимание, что путь, используемый во входном ресурсе, не должен иметь никакого. символов.

Например, следующий входной ресурс соответствует запросам для хоста example.com с URL-адресом / helloworld.

$ 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 работает только из-за одной аннотации, которая входной класс.

Если посмотреть аннотации гавани здесь , возможно, проблема в том, что вы хотите использовать вход с istio.


, но как установить подстановочный знак * в шлеме?

Подстановочный знак здесь делать нечего. Как я уже упоминал в этом ответе , вы можете использовать подстановочные знаки или дополнительные пути, что хорошо сделано. Взгляните на входные дорожки здесь .

0 голосов
/ 04 мая 2020

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

Если вы посмотрите здесь, у них есть путь, жестко запрограммированный для пары вариантов входа. Посланник / Истио не один из них. Тем не менее, вы можете быть в luck-expose.ingress.controller, установленном в «gce», и, кажется, задает пути так, как вам нужно. (Я никогда не использовал gce, может быть, они даже используют istio?)

Правка - оригинальный ответ ниже. Видимо, есть входной контроллер, который вы можете включить в istio. На нем нет абсолютно никаких документов, но чего мне ожидать?

В вашем случае, однако, штурвал не ваша проблема. istio не использует ingress объекты, он использует «шлюзы» и «виртуальные сервисы». Вы не можете настроить приложение для использования системы istio ingress, используя аннотации kubernetes.io/ingress.class.

(по крайней мере, таков был мой опыт, и я не могу найти ничего, что могло бы противоречить этому в их документы, но вполне возможно, что есть istio ingress controller tha

...