Markus Pesch 2005fb8e05
All checks were successful
Helm / helm-lint (push) Successful in 7s
Helm / helm-unittest (push) Successful in 15s
fix(ci): update workflows and make targets
2025-10-12 16:37:24 +02:00
2025-10-03 16:29:27 +02:00
2025-10-03 16:29:27 +02:00
2025-06-06 08:01:11 +02:00
2025-10-03 16:29:27 +02:00
2025-10-03 16:29:27 +02:00
2025-06-06 08:01:11 +02:00
2025-10-03 16:29:27 +02:00

athens-proxy-charts

Artifact Hub

This is an inofficial helm chart of the go-proxy athens which supports more complex configuration options.

This helm chart can be found on artifacthub.io and can be installed via helm.

helm repo add volker.raschek https://charts.cryptic.systems/volker.raschek
helm install athens-proxy volker.raschek/athens-proxy

Customization

The complete deployment can be adapted via the values.yaml files. The configuration of the proxy can be done via the environment variables described below or via mounting the config.toml as additional persistent volume to /config/config.toml

Access private repositories via SSH

Create a configmap.yaml with multiple keys. One key describe the content of the .gitconfig file and another of config of the ssh client. All requests Git clone comands with the prefix http://github.com/ will be replaced by git@github.com: to use SSH instead of HTTPS. The SSH keys are stored in a separate secret.

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-configs
data:
  sshconfig: |
    Host github.com
      IdentityFile /root/.ssh/id_ed25519
      StrictHostKeyChecking no
  gitconfig: |
    [url "git@github.com:"]
      insteadOf = https://github.com/

The secret definition below contains the SSH private and public key.

apiVersion: v1
kind: Secret
metadata:
  name: custom-ssh-keys
type: Opaque
stringData:
  id_ed25519: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
    QyNTUxOQAAACCpf/10TWlksg6/5mZF067fTGvW71I5QVJEp/nyC8hVHgAAAJgwWWNdMFlj
    XQAAAAtzc2gtZWQyNTUxOQAAACCpf/10TWlksg6/5mZF067fTGvW71I5QVJEp/nyC8hVHg
    AAAEDzTPitanzgl6iThoFCx8AXwsGLS5Q+3+K66ZOmN0p6+6l//XRNaWSyDr/mZkXTrt9M
    a9bvUjlBUkSn+fILyFUeAAAAEG1hcmt1c0BtYXJrdXMtcGMBAgMEBQ==
    -----END OPENSSH PRIVATE KEY-----
  id_ed25519.pub: |
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKl//XRNaWSyDr/mZkXTrt9Ma9bvUjlBUkSn+fILyFUe

The item config of the configmap will be merged with the items of the secret as virtual volume. This volume can than be mounted with special permissions required for the ssh client.

extraVolumes:
- name: ssh
  projected:
    defaultMode: 0644
    sources:
    - configMap:
        name: custom-configs
        items:
        - key: sshconfig
          path: config
    - secret:
        name: custom-ssh-keys
        items:
        - key: id_ed25519
          path: id_ed25519
          mode: 0600
        - key: id_ed25519.pub
          path: id_ed25519.pub
- name: gitconfig
  configMap:
    name: custom-configs
    items:
    - key: gitconfig
      path: config
      mode: 0644

extraVolumeMounts:
- name: ssh
  mountPath: /root/.ssh
- name: gitconfig
  mountPath: /root/.config/git

Access private GitHub.com repositories via developer token

Another way to access private GitHub repositories is via a GitHub token, which can be set via the environment variable GITHUB_TOKEN. Athens automatically creates a .netrc file to access private GitHub repositories.

Access private repositories via .netrc configuration

As describe above, a .netrc file is responsible for the authentication via HTTP. The file can also be defined via a custom secret and mounted into the home directory of root for general authentication purpose.

The example below describe the definition and mounting of a custom .netrc file to access private repositories hosted on GitHub and GitLab.

apiVersion: v1
kind: Secret
metadata:
  name: custom-netrc
type: Opaque
stringData:
  netrc: |
    machine github.com login USERNAME password API-KEY
    machine gitlab.com login USERNAME password API-KEY

The file must then be mounted via extraVolumes and extraVolumeMounts.

extraVolumes:
- name: netrc
  secret:
    secretName: custom-netrc
    items:
    - key: netrc
      path: .netrc
      mode: 0600

extraVolumeMounts:
- name: netrc
  mountPath: /root

Persistent storage

Unlike the athens default, the default here is disk - i.e. the files are written to the container. Therefore, it is advisable to outsource the corresponding storage location to persistent storage. The following example describes the integration of a persistent storage claim.

extraVolumes:
- name: gomodules
  persistentVolumeClaim:
    claimName: custom-gomodules-pvc

extraVolumeMounts:
- name: gomodules
  mountPath: /var/lib/athens

Parameters

Global

Name Description Value
nameOverride Individual release name suffix. ""
fullnameOverride Override the complete release name logic. ""

Configuration

Name Description Value
config.env.existingSecret.enabled Mount an existing secret containing the application specific environment variables. false
config.env.existingSecret.secretName Name of the existing secret containing the application specific environment variables. ""
config.env.secret.annotations Additional annotations of the secret containing the database credentials. {}
config.env.secret.labels Additional labels of the secret containing the database credentials. {}
config.env.secret.envs List of environment variables stored in a secret and mounted into the container. {}
config.downloadMode.enabled Enable mounting of a download mode file into the container file system. If enabled, the env ATHENS_DOWNLOAD_MODE will automatically be defined. false
config.downloadMode.existingConfigMap.enabled Enable to use an external config map for mounting the download mode file. false
config.downloadMode.existingConfigMap.configMapName The name of the existing config map which should be used to mount the download mode file. ""
config.downloadMode.existingConfigMap.downloadModeKey The name of the key inside the config map where the content of the download mode file is stored. downloadMode
config.downloadMode.configMap.annotations Additional annotations of the config map containing the download mode file. {}
config.downloadMode.configMap.labels Additional labels of the config map containing the download mode file. {}
config.downloadMode.configMap.content The content of the download mode file. `# downloadURL = "https://proxy.golang.org"

mode = "async_redirect"

download "github.com/gomods/*" {

mode = "sync"

}

download "golang.org/x/*" {

mode = "none"

}

download "github.com/pkg/*" {

mode = "redirect"

downloadURL = "https://gocenter.io"

}

| |config.gitConfig.enabled | Enable mounting of a .gitconfig file into the container file system. |false | |config.gitConfig.existingConfigMap.enabled | Enable to use an external config map for mounting the .gitconfig file. |false | |config.gitConfig.existingConfigMap.configMapName | The name of the existing config map which should be used to mount the .gitconfig file. |"" | |config.gitConfig.existingConfigMap.gitConfigKey | The name of the key inside the config map where the content of the .gitconfig file is stored. |nil | |config.gitConfig.configMap.annotations | Additional annotations of the config map containing the .gitconfig file. |{} | |config.gitConfig.configMap.labels | Additional labels of the config map containing the .gitconfig file. |{} | |config.gitConfig.configMap.content | The content of the .gitconfig file. |# The .gitconfig file

The .gitconfig file contains the user specific git configuration. It generally resides in the user's home

directory.

[url "git@github.com:"] insteadOf = https://github.com/

| |config.netrc.enabled | Enable mounting of a .netrc file into the container file system. |false | |config.netrc.existingSecret.enabled | Enable to use an external secret for mounting the .netrc file. |false | |config.netrc.existingSecret.secretName | The name of the existing secret which should be used to mount the .netrc file. |"" | |config.netrc.existingSecret.netrcKey | The name of the key inside the secret where the content of the .netrc file is stored. |.netrc | |config.netrc.secret.annotations | Additional annotations of the secret containing the database credentials. |{} | |config.netrc.secret.labels | Additional labels of the secret containing the database credentials. |{} | |config.netrc.secret.content | The content of the .netrc file. |# The .netrc file

The .netrc file contains login and initialization information used by the auto-login process. It generally

resides in the user's home directory, but a location outside of the home directory can be set using the

environment variable NETRC. Both locations are overridden by the command line option -N. The selected file

must be a regular file, or access will be denied.

https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html

default login [name] password [password/token]

machine github.com [octocat] password [PAT]

machine api.github.com [octocat] password [PAT]

| |config.ssh.enabled | Enable mounting of a .netrc file into the container file system. |false | |config.ssh.existingSecret.enabled | Enable to use an external secret for mounting the public and private SSH key files. |false | |config.ssh.existingSecret.secretName | The name of the existing secret which should be used to mount the public and private SSH key files. |"" | |config.ssh.existingSecret.configKey | The name of the key inside the secret where the content of the SSH client config file is stored. |config | |config.ssh.existingSecret.id_ed25519Key | The name of the key inside the secret where the content of the id_ed25519 key file is stored. |id_ed25519 | |config.ssh.existingSecret.id_ed25519PubKey | The name of the key inside the secret where the content of the id_ed25519.pub key file is stored. |id_ed25519.pub | |config.ssh.existingSecret.id_rsaKey | The name of the key inside the secret where the content of the id_rsa key file is stored. |id_rsa | |config.ssh.existingSecret.id_rsaPubKey | The name of the key inside the secret where the content of the id_ed25519.pub key file is stored. |id_rsa.pub | |config.ssh.secret.annotations | Additional annotations of the secret containing the public and private SSH key files. |{} | |config.ssh.secret.labels | Additional labels of the secret containing the public and private SSH key files. |{} | |config.ssh.secret.config | The content of the SSH client config file. |# Host *

IdentityFile ~/.ssh/id_ed25519

IdentityFile ~/.ssh/id_rsa

` |

Deployment

Name Description Value
deployment.annotations Additional deployment annotations. {}
deployment.labels Additional deployment labels. {}
deployment.additionalContainers List of additional containers. []
deployment.affinity Affinity for the athens-proxy deployment. {}
deployment.initContainers List of additional init containers. []
deployment.dnsConfig dnsConfig of the athens-proxy deployment. {}
deployment.dnsPolicy dnsPolicy of the athens-proxy deployment. ""
deployment.hostname Individual hostname of the pod. ""
deployment.subdomain Individual domain of the pod. ""
deployment.hostNetwork Use the kernel network namespace of the host system. false
deployment.imagePullSecrets Secret to use for pulling the image. []
deployment.athensProxy.args Arguments passed to the athens-proxy container. []
deployment.athensProxy.command Command passed to the athens-proxy container. []
deployment.athensProxy.env List of environment variables for the athens-proxy container. []
deployment.athensProxy.envFrom List of environment variables mounted from configMaps or secrets for the athens-proxy container. []
deployment.athensProxy.image.registry Image registry, eg. docker.io. docker.io
deployment.athensProxy.image.repository Image repository, eg. library/busybox. gomods/athens
deployment.athensProxy.image.tag Custom image tag, eg. 0.1.0. Defaults to appVersion. ""
deployment.athensProxy.image.pullPolicy Image pull policy. IfNotPresent
deployment.athensProxy.resources CPU and memory resources of the pod. {}
deployment.athensProxy.securityContext Security context of the container of the deployment. {}
deployment.athensProxy.volumeMounts Additional volume mounts. []
deployment.nodeSelector NodeSelector of the athens-proxy deployment. {}
deployment.priorityClassName PriorityClassName of the athens-proxy deployment. ""
deployment.replicas Number of replicas for the athens-proxy deployment. 1
deployment.restartPolicy Restart policy of the athens-proxy deployment. ""
deployment.securityContext Security context of the athens-proxy deployment. {}
deployment.strategy.type Strategy type - Recreate or RollingUpdate. RollingUpdate
deployment.strategy.rollingUpdate.maxSurge The maximum number of pods that can be scheduled above the desired number of pods during a rolling update. 1
deployment.strategy.rollingUpdate.maxUnavailable The maximum number of pods that can be unavailable during a rolling update. 1
deployment.terminationGracePeriodSeconds How long to wait until forcefully kill the pod. 60
deployment.tolerations Tolerations of the athens-proxy deployment. []
deployment.topologySpreadConstraints TopologySpreadConstraints of the athens-proxy deployment. []
deployment.volumes Additional volumes to mount into the pods of the prometheus-exporter deployment. []

Horizontal Pod Autoscaler (HPA)

Name Description Value
hpa.enabled Enable the horizontal pod autoscaler (HPA). false
hpa.annotations Additional annotations for the HPA. {}
hpa.labels Additional labels for the HPA. {}
hpa.metrics Metrics contains the specifications for which to use to calculate the desired replica count. undefined
hpa.minReplicas Min replicas is the lower limit for the number of replicas to which the autoscaler can scale down. 1
hpa.maxReplicas Upper limit for the number of pods that can be set by the autoscaler. 10

Ingress

Name Description Value
ingress.enabled Enable creation of an ingress resource. Requires, that the http service is also enabled. false
ingress.className Ingress class. nginx
ingress.annotations Additional ingress annotations. {}
ingress.labels Additional ingress labels. {}
ingress.hosts Ingress specific configuration. Specification only required when another ingress controller is used instead of `t1k. []
ingress.tls Ingress TLS settings. Specification only required when another ingress controller is used instead of `t1k``. []

Persistence

Name Description Value
persistence.enabled Enable the feature to store the data on a persistent volume claim. If enabled, the volume will be automatically be mounted into the pod. Furthermore, the env ATHENS_STORAGE_TYPE=disk will automatically be defined. false
persistence.data.mountPath The path where the persistent volume should be mounted in the container file system. This variable controls ATHENS_DISK_STORAGE_ROOT. /var/www/athens-proxy/data
persistence.data.existingPersistentVolumeClaim.enabled TODO false
persistence.data.existingPersistentVolumeClaim.persistentVolumeClaimName TODO ""
persistence.data.persistentVolumeClaim.annotations Additional persistent volume claim annotations. {}
persistence.data.persistentVolumeClaim.labels Additional persistent volume claim labels. {}
persistence.data.persistentVolumeClaim.accessModes Access modes of the persistent volume claim. ["ReadWriteMany"]
persistence.data.persistentVolumeClaim.storageClass Storage class of the persistent volume claim. ""
persistence.data.persistentVolumeClaim.storageSize Size of the persistent volume claim. 5Gi

NetworkPolicies

Name Description Value
networkPolicies.enabled Enable network policies in general. false
networkPolicies.default.enabled Enable the network policy for accessing the application by default. For example to scape the metrics. false
networkPolicies.default.annotations Additional network policy annotations. {}
networkPolicies.default.labels Additional network policy labels. {}
networkPolicies.default.policyTypes List of policy types. Supported is ingress, egress or ingress and egress. []
networkPolicies.default.egress Concrete egress network policy implementation. []
networkPolicies.default.ingress Concrete ingress network policy implementation. []

Service

Name Description Value
services.http.enabled Enable the service. true
services.http.annotations Additional service annotations. {}
services.http.externalIPs External IPs for the service. []
services.http.externalTrafficPolicy If service.type is NodePort or LoadBalancer, set this to Local to tell kube-proxy to only use node local endpoints for cluster external traffic. Furthermore, this enables source IP preservation. Cluster
services.http.internalTrafficPolicy If service.type is NodePort or LoadBalancer, set this to Local to tell kube-proxy to only use node local endpoints for cluster internal traffic. Cluster
services.http.ipFamilies IPFamilies is list of IP families (e.g. IPv4, IPv6) assigned to this service. This field is usually assigned automatically based on cluster configuration and only required for customization. []
services.http.labels Additional service labels. {}
services.http.loadBalancerClass LoadBalancerClass is the class of the load balancer implementation this Service belongs to. Requires service from type LoadBalancer. ""
services.http.loadBalancerIP LoadBalancer will get created with the IP specified in this field. Requires service from type LoadBalancer. ""
services.http.loadBalancerSourceRanges Source range filter for LoadBalancer. Requires service from type LoadBalancer. []
services.http.port Port to forward the traffic to. 3000
services.http.sessionAffinity Supports ClientIP and None. Enable client IP based session affinity via ClientIP. None
services.http.sessionAffinityConfig Contains the configuration of the session affinity. {}
services.http.type Kubernetes service type for the traffic. ClusterIP

ServiceAccount

Name Description Value
serviceAccount.existing.enabled Use an existing service account instead of creating a new one. Assumes that the user has all the necessary kubernetes API authorizations. false
serviceAccount.existing.serviceAccountName Name of the existing service account. ""
serviceAccount.new.annotations Additional service account annotations. {}
serviceAccount.new.labels Additional service account labels. {}
serviceAccount.new.automountServiceAccountToken Enable/disable auto mounting of the service account token. true
serviceAccount.new.imagePullSecrets ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this serviceAccount. []
serviceAccount.new.secrets Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. []
Languages
Smarty 77.6%
Makefile 12.2%
Shell 10.2%