dependabot[bot]andGitHub fa16fa246c build(deps): bump the actions group across 1 directory with 4 updates
Bumps the actions group with 4 updates in the / directory: [stefanprodan/timoni/actions/setup](https://github.com/stefanprodan/timoni), [fluxcd/flux2/action](https://github.com/fluxcd/flux2), [docker/login-action](https://github.com/docker/login-action) and [actions/attest](https://github.com/actions/attest).


Updates `stefanprodan/timoni/actions/setup` from 0.27.0 to 0.27.1
- [Release notes](https://github.com/stefanprodan/timoni/releases)
- [Commits](https://github.com/stefanprodan/timoni/compare/69e421aebbed979ded721df0da2a54428c5b4b9c...1aded1483439b39f391d0db0177a9f3912baee59)

Updates `fluxcd/flux2/action` from 2.9.2 to 2.9.3
- [Release notes](https://github.com/fluxcd/flux2/releases)
- [Commits](https://github.com/fluxcd/flux2/compare/6a650dba1b4ae9945185c4bb3cc3f386aaf71b3d...16602fa989daa99762f1c6d1186ae2ad1c735815)

Updates `docker/login-action` from 4.4.0 to 4.6.0
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/af1e73f918a031802d376d3c8bbc3fe56130a9b0...dbcb813823bdd20940b903addbd779551569679f)

Updates `actions/attest` from 4.2.0 to 4.2.1
- [Release notes](https://github.com/actions/attest/releases)
- [Changelog](https://github.com/actions/attest/blob/main/RELEASE.md)
- [Commits](https://github.com/actions/attest/compare/f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6...508db95dd578ae2727ebd6217d5ba78e4fbda05d)

---
updated-dependencies:
- dependency-name: stefanprodan/timoni/actions/setup
  dependency-version: 0.27.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: fluxcd/flux2/action
  dependency-version: 2.9.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: docker/login-action
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: actions/attest
  dependency-version: 4.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-03 06:48:02 +00:00
2026-05-20 12:41:38 +03:00
2024-02-25 12:12:22 +02:00
2026-07-22 11:19:24 +03:00
2026-07-22 11:19:24 +03:00
2026-07-22 11:19:24 +03:00
2026-03-14 22:38:14 +01:00
2026-07-22 11:19:24 +03:00
2026-05-20 12:41:32 +03:00
2026-07-22 11:19:24 +03:00
2023-09-23 00:43:20 +03:00
2024-02-25 12:12:22 +02:00
2025-05-15 01:28:59 +03:00
2020-09-20 14:08:41 +03:00
2026-06-18 11:44:10 +03:00
2026-06-03 09:08:51 -04:00

podinfo

e2e test cve-scan Go Report Card Docker Pulls slsa

Podinfo is a tiny web application made with Go that showcases best practices of running microservices in Kubernetes. Podinfo is used by CNCF projects like Flux and Flagger for end-to-end testing and workshops.

Specifications:

  • Health checks (readiness and liveness)
  • Graceful shutdown on interrupt signals
  • File watcher for secrets and configmaps
  • Instrumented with Prometheus and Open Telemetry
  • Structured logging with zap
  • 12-factor app with viper
  • Fault injection (random errors and latency)
  • Swagger docs
  • Timoni, Helm and Kustomize installers
  • End-to-End testing with Kubernetes Kind and Helm
  • Multi-arch container image with Docker buildx and GitHub Actions
  • Container image signing with Sigstore cosign
  • SBOMs and SLSA Provenance embedded in the container image
  • CVE scanning with govulncheck

Web API:

  • GET / prints runtime information
  • GET /version prints podinfo version and git commit hash
  • GET /metrics return HTTP requests duration and Go runtime metrics
  • GET /healthz used by Kubernetes liveness probe
  • GET /readyz used by Kubernetes readiness probe
  • POST /readyz/enable signals the Kubernetes LB that this instance is ready to receive traffic
  • POST /readyz/disable signals the Kubernetes LB to stop sending requests to this instance
  • POST /fault_injection/enable makes this instance respond with HTTP 500 to all application endpoints (probes, metrics, pprof and the /fault_injection/* control endpoints stay healthy) — useful for testing client-side circuit breakers / outlier detection against a single "sick" replica
  • POST /fault_injection/disable restores normal responses
  • GET /fault_injection/status returns the current fault injection state (enabled or disabled)
  • GET /status/{code} returns the status code
  • GET /panic crashes the process with exit code 255
  • POST /echo forwards the call to the backend service and echos the posted content
  • GET /env returns the environment variables as a JSON array
  • GET /headers returns a JSON with the request HTTP headers
  • GET /delay/{seconds} waits for the specified period
  • POST /token issues a JWT token valid for one minute JWT=$(curl -sd 'anon' podinfo:9898/token | jq -r .token)
  • GET /token/validate validates the JWT token curl -H "Authorization: Bearer $JWT" podinfo:9898/token/validate
  • GET /configs returns a JSON with configmaps and/or secrets mounted in the config volume
  • POST/PUT /cache/{key} saves the posted content to Redis
  • GET /cache/{key} returns the content from Redis if the key exists
  • DELETE /cache/{key} deletes the key from Redis if exists
  • POST /store writes the posted content to disk at /data/hash and returns the SHA1 hash of the content
  • GET /store/{hash} returns the content of the file /data/hash if exists
  • GET /ws/echo echos content via websockets podcli ws ws://localhost:9898/ws/echo
  • GET /chunked/{seconds} uses transfer-encoding type chunked to give a partial response and then waits for the specified period
  • GET /swagger.json returns the API Swagger docs, used for Linkerd service profiling and Gloo routes discovery

gRPC API:

  • /grpc.health.v1.Health/Check health checking
  • /grpc.EchoService/Echo echos the received content
  • /grpc.VersionService/Version returns podinfo version and Git commit hash
  • /grpc.DelayService/Delay returns a successful response after the given seconds in the body of gRPC request
  • /grpc.EnvService/Env returns environment variables as a JSON array
  • /grpc.HeaderService/Header returns the headers present in the gRPC request. Any custom header can also be given as a part of request and that can be returned using this API
  • /grpc.InfoService/Info returns the runtime information
  • /grpc.PanicService/Panic crashes the process with gRPC status code as '1 CANCELLED'
  • /grpc.StatusService/Status returns the gRPC Status code given in the request body
  • /grpc.TokenService/TokenGenerate issues a JWT token valid for one minute
  • /grpc.TokenService/TokenValidate validates the JWT token

Web UI:

podinfo-ui

To access the Swagger UI open <podinfo-host>/swagger/index.html in a browser.

Guides

Install

To install Podinfo on Kubernetes the minimum required version is Kubernetes v1.23.

Timoni

Install with Timoni:

timoni -n default apply podinfo oci://ghcr.io/stefanprodan/modules/podinfo

Helm

Install from github.io:

helm repo add podinfo https://stefanprodan.github.io/podinfo

helm upgrade --install --wait frontend \
--namespace test \
--set replicaCount=2 \
--set backend=http://backend-podinfo:9898/echo \
podinfo/podinfo

helm test frontend --namespace test

helm upgrade --install --wait backend \
--namespace test \
--set redis.enabled=true \
podinfo/podinfo

Install from ghcr.io:

helm upgrade --install --wait podinfo --namespace default \
oci://ghcr.io/stefanprodan/charts/podinfo

Kustomize

kubectl apply -k github.com/stefanprodan/podinfo//kustomize

Docker

docker run -dp 9898:9898 stefanprodan/podinfo

Continuous Delivery

In order to install podinfo on a Kubernetes cluster and keep it up to date with the latest release in an automated manner, you can use Flux.

Install the Flux CLI on MacOS and Linux using Homebrew:

brew install fluxcd/tap/flux

Install the Flux controllers needed for Helm operations:

flux install \
--namespace=flux-system \
--network-policy=false \
--components=source-controller,helm-controller

Add podinfo's Helm repository to your cluster and configure Flux to check for new chart releases every ten minutes:

flux create source helm podinfo \
--namespace=default \
--url=https://stefanprodan.github.io/podinfo \
--interval=10m

Create a podinfo-values.yaml file locally:

cat > podinfo-values.yaml <<EOL
replicaCount: 2
resources:
  limits:
    memory: 256Mi
  requests:
    cpu: 100m
    memory: 64Mi
EOL

Create a Helm release for deploying podinfo in the default namespace:

flux create helmrelease podinfo \
--namespace=default \
--source=HelmRepository/podinfo \
--release-name=podinfo \
--chart=podinfo \
--chart-version=">5.0.0" \
--values=podinfo-values.yaml

Based on the above definition, Flux will upgrade the release automatically when a new version of podinfo is released. If the upgrade fails, Flux can rollback to the previous working version.

You can check what version is currently deployed with:

flux get helmreleases -n default

To delete podinfo's Helm repository and release from your cluster run:

flux -n default delete source helm podinfo
flux -n default delete helmrelease podinfo

If you wish to manage the lifecycle of your applications in a GitOps manner, check out this workflow example for multi-env deployments with Flux, Kustomize and Helm.

S
Description
Go microservice template for Kubernetes
Readme Apache-2.0
15 MiB
Languages
Go 81%
CUE 9.1%
Shell 3.1%
HTML 3%
Makefile 2.1%
Other 1.7%