Netzwerk
Ziel
In diesem Projekt werden Sie lernen, wie Sie verschiedene Netzwerkfunktionen in Kubernetes verwenden können. Dazu gehören Port-Forwarding, HostPorts und Ingress.
Hilfsmittel
- Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets eigenständig zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Aufgabe 1: Port-Forwarding
Aufgabe 1.1: Webserver Deployment und Service erstellen
- Erstellen Sie ein Deployment
web
in der Dateiport-forwarding.yaml
, das das Imagenginx
verwendet und einen entsprechenden Serviceweb
. Vergessen Sie nicht die Label-Selektoren, um die Pods dem Service zuzuordnen
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx
ports:
- name: web
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: web
-
Deployen Sie das Deployment und den Service:
kubectl apply -f port-forwarding.yaml
Aufgabe 1.2: Port-Forward erstellen und testen
- Erstellen Sie ein Port-Forward von Port 8082 auf Ihrem Rechner auf den
Service-Port 80. Der Port-Forward-Prozess wird im Vordergrund Ihres Terminals
ausgeführt, bis Sie ihn mit
[STRG] + [C]
beenden.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl port-forward service/web 8082:80
- Öffnen Sie ein neues Terminal und verwenden Sie
curl
, umhttp://127.0.0.1:8082
zu öffnen - Öffnen Sie einen Browser-Tab unter
<VSCode-URL>/proxy/8081/wp-admin/install.php
, um sich mit dem nginx-Webserver zu verbinden - Stoppen Sie den Port-Forward-Befehl mit
[STRG] + [C]
Aufgabe 2: NodePorts
- Kopieren Sie das Deployment und den Service aus der vorherigen Aufgabe in die Datei
node-ports.yaml
- Ändern Sie den Service so, dass er einen
NodePort
öffnet der auf den Pod-Port 80 zeigt
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: NodePort
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
- Deployen Sie das Deployment und den Service
- Schauen Sie sich den Service an, um den zugewiesenen NodePort zu ermitteln
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl describe svc web
- Lassen Sie sich die IP-Adresse der Worker-Nodes anzeigen
kubectl get nodes -o wide
- Kopieren Sie sich eine der externen IP-Adressen. Wichtig: Verwenden Sie eine IP-Adresse von einem Worker, nicht von der Control-Plane. Welche Sie verwenden, ist egal.
- Öffnen Sie einen Browser-Tab unter
<WorkerIP>:<NodePort>
, um sich mit dem nginx-Webserver zu verbinden
Aufgabe 3: Ingress
- Kopieren Sie das Deployment und den Service aus der ersten Aufgabe in die Datei
ingress.yaml
- Erstellen Sie eine Ingress-Ressource, um den Traffic auf den Service zu routen
- Die Regeln für den Ingress sind:
- host:
nginx.cluster.<VSCode-URL>
- path: /
- pathType: Exact
- backend: Service
web
auf Port 80
- host:
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mynginx
spec:
rules:
- host: nginx.cluster.<VSCode-URL>
http:
paths:
- path: /
pathType: Exact
backend:
service:
name: web
port:
number: 80
- Deployen Sie das Deployment, den Service und den Ingress
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl apply -f ingress.yaml
- Öffnen Sie die URL
http://nginx.cluster.<VSCode-URL>
in Ihrem Browser und überprüfen Sie, ob Sie auf die Webanwendung zugreifen können