Dieser Beitrag ist ein Tutorial darüber, wie man eine mit nginx gehostete Website mit dem in K3s eingebauten Ingress Controller Traefik exponiert.
Er basiert auf meinem letzten Beitrag
Das Ergebnis war ein “leerer” Cluster ohne nützliche Services. In meinem ersten Beitrag zur Installation von K3s habe ich einen Ingress Controller basierend auf HAProxy erstellt. Damals war mir nicht bewusst, dass K3s bereits einen Ingress Controller enthält, der sofort einsatzbereit ist.
Diesmal werden vier Kubernetes-Ressourcen benötigt:
- ConfigMap
- Deployment
- Service
- Ingress
Die ConfigMap ist ein schneller Weg, die index.html für nginx verfügbar zu machen. Es ist keine saubere Art, eine Website zu hosten, und wird nur für dieses Tutorial verwendet.
Erstelle zuerst die index.html:
<html>
<head><title>Hello World!</title>
<style>
html {
font-size: 500.0%;
}
div {
text-align: center;
}
</style>
</head>
<body>
<div>Hello World!</div>
</body>
</html>
Dann erstelle die ConfigMap:
kubectl create configmap test-html --from-file index.html
Die restlichen Manifeste sind ähnlich wie im vorherigen Tutorial, außer der Volume-Deklaration im Deployment:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
kubernetes.io/ingress.class: "traefik"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: nginx-service
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
run: nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 10
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: html-volume
mountPath: /usr/share/nginx/html
volumes:
- name: html-volume
configMap:
name: test-html
Wende alles an mit:
kubectl apply -f nginx.yaml
Überprüfe die IP, unter der die Website erreichbar ist:
$ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
nginx-ingress <none> * 12.345.6.789 80 22m
Probiere es aus mit:
wget 12.345.6.789
Dies sollte das HTML zurückgeben, das am Anfang dieses Tutorials zur ConfigMap hinzugefügt wurde.