работает Гоарбор за обратным прокси - PullRequest
0 голосов
/ 16 апреля 2020

Здравствуйте, у меня есть гавань , которая отлично работает под http://harbor.domain, используя nginx вход, я устанавливаю с использованием карты гавани.

На терминале я могу ли я sh шлемы до http://harbor.domain/chartrepo/,

Я могу войти

docker login harbor.domain:80

и pu sh в реестр.

Моя задача заключается в том, чтобы я хотел получить доступ к порту через apache прокси, например

Я переустановил с помощью карты Harbour-helm, изменив values.yaml

externalURL: https://example.com

Итак, я имею на /etc/apache2/sites-available/example-le-ssl.conf я добавил следующее

    # helmcharts 
    <Location "/chartrepo/"> 
          ProxyPass "http://harbor.domain/chartrepo/"
          ProxyPassReverse "http://harbor.domain/chartrepo/"
    </Location>

    # harbor 
    <Location "/harbor"> 
          ProxyPass "http://harbor.domain/harbor"
          ProxyPassReverse "http://harbor.domain/harbor"
    </Location>

    # registry 
    <Location "/v2"> 
          ProxyPass "http://harbor.domain/v2"
          ProxyPassReverse "http://harbor.domain/v2"
    </Location>

К сожалению, если я сделаю docker login example.com docker логин вернется

Error response from daemon: login attempt to https://example.com/v2/ failed with status: 503 Service Unavailable

я получаю следующую ошибку в журналах реестра

error authorizing context: authorization token required

Есть идеи о том, чего мне не хватает?

Попытка сделать sh диаграмму также не удалась.

helm push --username='username' --password='password' demo-chart.tgz https://example.com/chartrepo/

Ошибка:

Error: 404: could not properly parse response JSON: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.41 (Ubuntu) Server at example.com Port 443</address>
</body></html>

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

моя первая проблема была в том, как apache обрабатывает прокси для бэкэнда https, здесь объясняется как настроить apache сервер для связи с внутренним сервером HTTPS? .

Я добавил на свой виртуальный хост /etc/apache2/sites-available/example-le-ssl.conf

    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    <Location "/v2"> 
          ProxyPass "http://harbor.domain/v2"
          ProxyPassReverse "http://harbor.domain/v2"
    </Location>
    <Location "/service/">
          # RequestHeader set X-Forwarded-Proto "https"
          ProxyPass "http://harbor.domain/service/"
          ProxyPassReverse "http://harbor.domain/service/"
    </Location>
0 голосов
/ 16 апреля 2020

Похоже, вы не можете авторизоваться в реестре docker. Либо вы можете добавить переменную в учетную запись службы по умолчанию, либо мы можем создать docker секрет реестра и добавить его в развертывание как imagepullsecret.

Если вы хотите сделать это из imagepullsecret, вы можете создать вспомогательный шаблон, что-то вроде

/* image pull secret */
{{- define "imagePullSecret" }}
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
{{- end }}

Затем вы можете использовать его в файле развертывания, например

imagePullSecrets:
      - name: {{.Values.imageCredentials.secretName}}

Весь файл может выглядеть как

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.appName }}
  namespace: {{ .Values.namespace }}
spec:
  selector:
    matchLabels:
      app: {{ .Values.appName }}
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ .Values.appName }}
    spec:
      containers:
      - name: {{ .Values.appName }}
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        {{- if .Values.hasSecretVolume }}
        volumeMounts:
        - name: {{ .Values.appName }}-volume-sec
          mountPath: {{ .Values.secretVolumeMountPath }}
        {{- end}}
        {{- if or .Values.env.configMap .Values.env.secrets }}
        envFrom:
        {{- if .Values.env.configMap }}
        - configMapRef:
            name: {{ .Values.appName }}-env-configmap
        {{- end }}
        {{- if .Values.env.secrets }}
        - secretRef:
            name: {{ .Values.appName }}-env-secret
        {{- end }}
        {{- end }}
        ports:
        - containerPort: {{ .Values.containerPort }}
          protocol: TCP
{{- if .Values.springContainerHealthChecks}}
{{ toYaml .Values.springContainerHealthChecks | indent 8 }}
{{- end}}
      {{- if .Values.hasSecretVolume }}
      volumes:
      - name: {{ .Values.appName }}-volume-sec
        secret:
          secretName: {{ .Values.appName }}-volume-sec
      {{- end}}
      {{- if .Values.imageCredentials}}
      imagePullSecrets:
      - name: {{.Values.imageCredentials.secretName}}
      {{- end}}

...