Ich bin sehr neu in Azure, Kubernetes, sogar Docker selbst, und spielt mit dem System zu lernen und für eine mögliche Bereitstellung später zu bewerten. Ich habe meine Dienste bisher dockert und erfolgreich implementiert und das Web-Frontend mit einem Service vom Typ LoadBalancer öffentlich sichtbar gemacht.Kubernetes Nginx Ingress-Controller auf Azure nicht erreichbar
Jetzt möchte ich TLS Terminierung hinzufügen und habe gelernt, dass ich dafür eine Ingress-Controller mit dem am häufigsten genannten Nginx-Ingress-Controller konfigurieren soll.
Streng monkey Beispiele und dann nachher versuchen, auf die Dokumente zu lesen Ich bin bei einem Setup angekommen, das interessant aussieht, aber nicht funktioniert. Vielleicht kann eine gute Seele auf meine Fehler hinweisen und/oder mir Hinweise geben, wie man das tut und wo man mehr darüber lesen kann.
Ich habe kubectl apply'd die folgende Datei:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: default-http-backend-deployment
namespace: kube-system
spec:
template:
metadata:
labels:
app: default-http-backend
spec:
terminationGracePeriodSeconds: 60
containers:
- name: default-http-backend
image: gcr.io/google_containers/defaultbackend:1.0
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: default-http-backend-service
namespace: kube-system
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: default-http-backend
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-ingress-controller-conf
namespace: kube-system
data:
# enable-vts-status: 'true'
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-ingress-controller-deployment
namespace: kube-system
spec:
replicas: 1
template:
metadata:
labels:
app: nginx-ingress-controller
spec:
terminationGracePeriodSeconds: 60
containers:
- image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.13
name: nginx-ingress-controller
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
- --configmap=$(POD_NAMESPACE)/nginx-ingress-controller-conf
---
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress-controller-service
namespace: kube-system
spec:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ingress-controller
sessionAffinity: None
type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
namespace: kube-system
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host:
http:
paths:
- path:/
backend:
serviceName: default-http-backend-service
servicePort: 80
Das gab mir zwei Schoten:
c:\Projects\Release-Management\Azure>kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
<some lines removed>
kube-system default-http-backend-deployment-3108185104-68xnk 1/1 Running 0 39m
<some lines removed>
kube-system nginx-ingress-controller-deployment-4106313651-v7p03 1/1 Running 0 24s
Auch zwei neue Dienste. Beachten Sie, dass ich auch den Standard-http-Backend-Dienst mit dem folgenden Typ konfiguriert habe: LoadBalancer, dies dient nur zum Debuggen. Ich habe meine Web-Frontend enthalten, die WebCMS genannt wird:
c:\Projects\Release-Management\Azure>kubectl get services --all-namespaces
NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<some lines removed>
default webcms 10.0.105.59 13.94.250.173 80:31400/TCP 23h
<some lines removed>
kube-system default-http-backend-service 10.0.106.233 13.80.68.38 80:31639/TCP 41m
kube-system nginx-ingress-controller-service 10.0.33.80 13.95.30.39 443:31444/TCP,80:31452/TCP 37m
Und schließlich ein Eindringen:
c:\Projects\Release-Management\Azure>kubectl get ingress --all-namespaces
NAMESPACE NAME HOSTS ADDRESS PORTS AGE
kube-system nginx-ingress * 10.240.0.5 80 39m
Keine Fehler, die ich sofort erkennen kann. Ich ging dann zum Azure Dashboard und schaute auf den Loadbalancer und seine Regeln und das sieht meinem (ernsthaft untrainierten) Auge gut aus. Ich habe diese nicht berührt, der Loadbalancer und die Regeln wurden vom System erstellt. Es gibt einen Screenshot hier:
https://qvwx.de/tmp/azure-loadbalancer.png
Aber leider funktioniert es nicht.
c:\Projects\Release-Management\Azure>curl -v http://13.94.250.173
* Rebuilt URL to: http://13.94.250.173/
* Trying 13.94.250.173...
* TCP_NODELAY set
* Connected to 13.94.250.173 (13.94.250.173) port 80 (#0)
<more lines removed, success>
Aber weder Standard-http-Backend noch das Eindringen Arbeit:
c:\Projects\Release-Management\Azure>curl -v http://13.80.68.38
* Rebuilt URL to: http://13.80.68.38/
* Trying 13.80.68.38...
* TCP_NODELAY set
* connect to 13.80.68.38 port 80 failed: Timed out
* Failed to connect to 13.80.68.38 port 80: Timed out
* Closing connection 0
curl: (7) Failed to connect to 13.80.68.38 port 80: Timed out
(Eintritt gibt das gleiche mit einem anderen IP)
Wenn Sie mir meinen WebCMS-Service locken Lesen Sie weiter: Vielen Dank für Ihre Zeit und ich würde mich über Hinweise freuen.
Marian
Vielen Dank für Ihr Feedback, es war sehr willkommen und hat mir sehr geholfen. Ich habe Fortschritte gemacht und die Sache sehr gut funktionieren lassen. Für das Protokoll, ich denke, mein Problem war nicht so sehr in der Konfiguration gezeigt, aber mit DNS-Auflösung war ich nur allgemein verwirrt. Ein Zustand, der in letzter Zeit viel besser geworden ist. Es gibt keine Notwendigkeit, Entschuldigung für mich zu finden, finde ich die Dokumentation von Core-Kubernetes, der nginx Ingress Controller und sogar Microsoft für die Azure-Integration sehr hilfreich. Es gibt einfach eine Menge zu nehmen. Nochmals vielen Dank für die sehr hilfreiche Antwort. –