0

您好,我使用 nginx ingress在http://harbor.domain完美运行了Harbor,我使用 Harbor-helm 图表安装。

在终端上,我可以将 helmcharts 推送到http://harbor.domain/chartrepo/

我可以登录

docker login harbor.domain:80

并推送到注册表。

我的挑战是我想通过 apache 代理访问港口,例如

我通过更改使用harbor-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 login 返回

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

我在注册表日志中收到以下错误

error authorizing context: authorization token required

关于我缺少什么的任何想法?

尝试推送图表也失败了。

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>
4

2 回答 2

0

我的第一个问题是 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>
于 2020-04-18T13:52:34.303 回答
0

您似乎无法授权 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}}

于 2020-04-16T13:35:38.797 回答