- Lab
- A Cloud Guru
Forwarding Port Traffic with an Ambassador Container
Multi-container pods provide a variety of ways to enhance containers. When using the ambassador design pattern, a secondary container can intercept and translate network traffic before passing it on to the main container. In this lab, you will have a chance to implement a multi-container pod using the ambassador model. You will use an ambassador container running HAProxy to proxy traffic to a legacy service on a different port. After completing this exercise, you will have a hands-on understanding of how the ambassador model can be implemented.
Path Info
Table of Contents
-
Challenge
Create a ConfigMap containing the configuration for the HAProxy ambassador.
Create a YAML definition file called
fruit-service-ambassador-config.yml
.apiVersion: v1 kind: ConfigMap metadata: name: fruit-service-ambassador-config data: haproxy.cfg: |- global daemon maxconn 256 defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms listen http-in bind *:80 server server1 127.0.0.1:8775 maxconn 32
Create the ConfigMap in the cluster from the YAML definition file.
kubectl apply -f fruit-service-ambassador-config.yml
-
Challenge
Create a multi-container pod which provides access to the legacy service on port 80.
Create a YAML definition file for the pod called
fruit-service.yml
.apiVersion: v1 kind: Pod metadata: name: fruit-service spec: containers: - name: legacy-fruit-service image: linuxacademycontent/legacy-fruit-service:1 - name: haproxy-ambassador image: haproxy:1.7 ports: - containerPort: 80 volumeMounts: - name: config-volume mountPath: /usr/local/etc/haproxy volumes: - name: config-volume configMap: name: fruit-service-ambassador-config
Create the pod in the cluster.
kubectl apply -f fruit-service.yml
If everything is working correctly, you should be able to access
fruit-service
from another pod.You can create a busybox pod to use for testing with a file called
busybox.yml
.apiVersion: v1 kind: Pod metadata: name: busybox spec: containers: - name: myapp-container image: radial/busyboxplus:curl command: ['sh', '-c', 'while true; do sleep 3600; done']
Create the busybox testing pod.
kubectl apply -f busybox.yml
Use the busybox pod to test the legacy service on port 80. This command uses a subcommand to get the cluster's IP address for the pod and executes a
curl
command in the busybox pod to access the legacy service on port 80.kubectl exec busybox -- curl $(kubectl get pod fruit-service -o=custom-columns=IP:.status.podIP --no-headers):80
If everything is working, you should see some JSON listing various types of fruit.
What's a lab?
Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.
Provided environment for hands-on practice
We will provide the credentials and environment necessary for you to practice right within your browser.
Guided walkthrough
Follow along with the author’s guided walkthrough and build something new in your provided environment!
Did you know?
On average, you retain 75% more of your learning if you get time for practice.