<p>I have deployed JFrog Container Registry to my Kubernetes cluster, which all comes up fine but when I try to access it via browser, it redirects to /ui which returns a 404 but nothing seems to show in the logs.</p>

<p>I have not used the Helm chart as I do not need the nginx or Postgres etc just to try it out.</p>

<p>My deployment is this:</p>

<pre><code>apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jcr
  namespace: &lt;REDACTED&gt;
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: jcr
    spec:
      containers:
        - name: jcr
          image: docker.bintray.io/jfrog/artifactory-jcr:latest
          ports:
            - containerPort: 8081
          volumeMounts:
            - name: jcr-data
              mountPath: /jcr-data
      volumes:
        - name: jcr-data
          persistentVolumeClaim:
            claimName: jcr-data
      securityContext:
        fsGroup: 2000
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jcr-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
  name: jcr
  namespace: &lt;REDACTED&gt;
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/path:   /
      prometheus.io/port:   '8081'
spec:
  selector: 
    app: jcr
  ports:
    - port: 80
      targetPort: 8081
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: contour.heptio.com/v1beta1
kind: IngressRoute
metadata: 
  labels:
    app: jcr
  name: jcr
  namespace: &lt;REDACTED&gt;
spec: 
  virtualhost:
    fqdn: &lt;REDACTED&gt;
    tls:
      secretName: jcr-live
  routes: 
    - match: /
      services: 
        - name: jcr
          port: 80
</code></pre>

Luke
<p>Looks like your port configuration is missing some changes.</p>

<ol>
<li><p>You need to expose port <code>8082</code> in the <code>jcr</code> container, which is now the main UI port</p></li>
<li><p>Once port is exposed, you should add this port to your service.</p></li>
</ol>

<p>So your revised yaml should look something like (Deployment and Service):</p>

<pre><code>apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jcr
  namespace: &lt;REDACTED&gt;
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: jcr
    spec:
      containers:
        - name: jcr
          image: docker.bintray.io/jfrog/artifactory-jcr:latest
          ports:
            - containerPort: 8081
            - containerPort: 8082
          volumeMounts:
            - name: jcr-data
              mountPath: /jcr-data
      volumes:
        - name: jcr-data
          persistentVolumeClaim:
            claimName: jcr-data
      securityContext:
        fsGroup: 2000
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jcr-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
  name: jcr
  namespace: &lt;REDACTED&gt;
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/path:   /
      prometheus.io/port:   '8081'
spec:
  selector: 
    app: jcr
  ports:
    - port: 80
      targetPort: 8082
    - port: 8081
      targetPort: 8081
  sessionAffinity: None
  type: ClusterIP
</code></pre>

<p>Notice I left 8081 open, which allows for direct access to Artifactory if needed for better performance (Artifactory is now running behind a router service).</p>

<p>NOTE - I recommend using the official <a href="https://hub.helm.sh/charts/jfrog/artifactory-jcr" rel="nofollow noreferrer">JFrog Container Registry Helm chart</a>, which greatly simplifies the process of configuring and managing your JCR deployment lifecycle.</p>
