Elevating Your Mission Software Deployments with UDS


The Challenge:
Have you ever tried to deploy applications in the Department of Defense (DoD)? No? Okay, picture this: it’s like trying to drive blindfolded. It can be done… but it's T-R-I-C-K-Y!!
Especially when you’re great at creating apps but the thought of Kubernetes makes you want to pull your hair out. Don’t sweat it, though! That’s exactly why Unicorn Delivery Service (UDS) steps in — to take the tech “tangles” out of Kubernetes with just a few simple commands.
The Solution With UDS:
Think of UDS as your deployment bestie that handles the deployment drama & lifts all the heavyweight! What a pal ;)
With just a few lines of code, everything that was hard about Kubernetes is now easy.
It just #works
UDS Core — The Backbone of Deployment
UDS Core isn’t just another tool; it’s your deployment powerhouse tailored for the defense sector’s unique demands — fast, secure, and compliant.
Are you curious about UDS Core? Dive deeper into our intro piece: From Zero to Hero: Kickstart Your Journey with UDS Core
UDS Core Highlights:
- Swift Deployment: UDS Core reduces the time needed to configure automated deployments.
- Enhanced Security: Satisfying NIST 800–53 controls by default, keeping your data extra safe!
- Streamlined Compliance: Smooths your path to a speedy Authority to Operate (ATO).
A Step-by-Step Tutorial: Deploy UDS Core & Your Application
Ready to see some magic? We’ll deploy UDS Core first, then layer on Podinfo (our chosen app) and watch the sparks fly as everything comes together seamlessly.
If you’re catching up, pop over to our first blog in this series to familiarize yourself with the UDS Core setup: Kickstart Your Journey with UDS Core
Step 1: Check your UDS version
Before we start, let’s make sure your UDS toolkit is up-to-date. Pop open your terminal and type:
uds version
This is our sanity check to make sure you’re running the latest and greatest, keeping you ahead in the deployment game.
Step 2: Deploy UDS Core Using K3d
Let’s get the heart of our operation up and running. Deploy the UDS Core using the following command, which pulls the latest k3d-core-demo OCI artifact:
uds deploy k3d-core-demo:0.22.2
This command sets up a demo-ready Kubernetes environment primed with UDS Core.
Press ‘y’ to confirm the deployment
Don’t forget: Keep tabs on the latest releases and choose the one that best fits your mission.
Wait it out: Once you press ‘y’ to confirm the deployment and then take a breather — this will take about 10–12 minutes. Perfect time for a snack break!
Step 3: Clone the Github Repo
Next up, clone the GitHub repository that contains your deployment configs:
git clone https://github.com/KinzP/pod-info-app-uds-core.git
cd pod-info-app-uds-core
This repo is your deployment command center, it holds all the files you’ll need to manage your application deployment effectively.
Inside Your Repo:
Zarf.yaml: This file packages your application, making sure everything needed for deployment is bundled up nicely — super useful for managing apps in secure or disconnected environments.
Learn more about Zarf at Zarf.dev
Within the Zarf.yaml, you’ll find the podinfo chart. This points straight to the Helm chart for podinfo and Zarf tells you exactly where to find it and which version to use.
kind: ZarfPackageConfig
metadata:
name: podinfo
description: Example showcasing multiple ways to deploy helm charts
version: 0.0.1
components:
- name: podinfo
required: true
charts:
- name: podinfo
version: 6.4.0
namespace: podinfo
# In this case `url` will load the helm chart located in the podinfo git repository
url:
https://github.com/stefanprodan/podinfo.git# By default git will look in the root of the git repository but you can define a sub directory with `gitPath`
gitPath: charts/podinfo
valuesFiles:
- values.yaml
images:
- curlimages/curl:7.69.0
- ghcr.io/stefanprodan/podinfo:6.4.0
- giantswarm/tiny-tools
- stefanprodan/grpc_health_probe:v0.3.0
# Cosign artifacts for images - helm-charts - demo-helm-charts
- ghcr.io/stefanprodan/podinfo:sha256-57a654ace69ec02ba8973093b6a786faa15640575fbf0dbb603db55aca2ccec8.sig
- name: uds-package-podinfo
required: true
manifests:
- name: podinfo-uds-package
namespace: podinfo
files:
- uds-package.yaml
uds-bundle.yaml: This config outlines how your app will be exposed within the Kubernetes environment, detailing everything from services to networking needs.
kind: UDSBundle
metadata:
name: podinfo-bundle
version: 0.0.1
packages:
- name: uds-k3d
repository: ghcr.io/defenseunicorns/uds-k3d
ref: latest
- name: podinfo
path: ./package/
ref: 0.0.1
Step 4: Identify Docker Images
Let’s confirm we have all the Docker images we need. This step is super important if you’re working towards deploying in an air-gapped environment where the internet is a no-go.
zarf dev find-images --repo-chart-path charts/ .
This command finds the Helm charts in the specified directory and lists all the Docker images your application needs to work. This is your chance to verify that all the images are accounted for and ready for the next steps!
Step 5: Create and Deploying the Zarf Package
Now, gather all of those Docker images and your app configuration and bundle them into one Zarf package.
uds z p c # Zarf package create
Step 6: Find Your Package
Pop into your project directory and watch the magic happen:
cd github/pod-info-app-uds-core
ls
Ready to be deployed to the UDS cluster with:
uds zarf package deploy
Step 7: Test Your Deployment
Open up your browser and navigate to http://podinfo.uds.dev/
Note: If you run into a “delayed connect error: 111,” it might be a hiccup. But don’t worry, it’s a snag that’s easy to fix, simply wait a few seconds and refresh your browser.
Step 8: P-I-N-G Time!
You’ll see the welcome screen of “podinfo v6.4.0” and a tempting red PING button. Go ahead, click it as many times as you like. Each ping is a little hello to your new setup.
Step 9: Let’s Check the Logs!
If you’re curious about the behind-the-scenes action, pop open your terminal:
uds z t m # Check the logs
You’ll see entries in the istio-tenant-gateway/tenant-ingressgateway — istio-proxy showing your pings with precise timestamps — proof that your setup is alive and kicking!
Step 10: Tidying Up
All good things must come to an end, including your newly set up Kubernetes cluster.
k3d cluster delete uds
Cheers! You’ve successfully deployed software with UDS.
What’s Next?
Stay tuned for our upcoming adventure, where we dive into UDS + Your App Your Environment (YAYE). We’ll show how UDS Core can deploy Your App in any environment, making it super easy to manage.
Curious for more?
Drop us a line for more insights or to share how UDS can supercharge your mission: