Je suis très nouveau sur Azure, Kubernetes, et même Docker lui-même, et je joue avec le système pour apprendre et évaluer un éventuel déploiement ultérieur. J'ai jusqu'ici dockerized mes services et les déployées avec succès et ai rendu l'interface Web publiquement visible en utilisant un service avec le type: LoadBalancer.Kubernetes nginx ingress-controller sur Azure inaccessible
Maintenant, je voudrais ajouter la terminaison TLS et j'ai appris que pour cela je suis supposé configurer un contrôleur d'entrée dont le plus couramment mentionné est nginx-ingress-controller.
Strictement monkeying des exemples, puis après avoir essayé de lire sur les documents, je suis arrivé à une configuration qui semble intéressante mais ne fonctionne pas. Peut-être qu'une âme aimable peut signaler mes erreurs et/ou me donner des indications sur la façon de déboguer cela et où en lire plus à ce sujet.
Je kubectl apply'd le fichier suivant:
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
Cela m'a donné deux gousses:
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
aussi deux nouveaux services. Notez que j'ai également configuré le service default-http-backend avec le type: LoadBalancer, ceci est uniquement pour le débogage. J'ai inclus mon web-frontend qui est appelé WebCMS:
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
Et enfin une entrée:
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
Aucune erreur que je peux détecter immédiatement. Je suis ensuite allé à Azure Dashboard et j'ai regardé le loadbalancer et ses règles et ça a l'air bien pour mon oeil (sérieusement non formé). Je n'ai pas touché à ceux-ci, le loadbalancer et les règles ont été créés par le système. Il y a ici une capture d'écran:
https://qvwx.de/tmp/azure-loadbalancer.png
Mais malheureusement, il ne fonctionne pas. Je peux courber mon WebCMS service:
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>
Mais ni default-http-back-end, ni le travail d'entrée:
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
(entrée donne la même chose avec une adresse IP différente)
Si vous lis jusqu'ici: Merci pour votre temps et j'apprécierais n'importe quels conseils.
Marian
Je vous remercie pour vos commentaires, il a été le bienvenu et m'a beaucoup aidé. J'ai fait des progrès et j'ai très bien fonctionné. Pour l'anecdote, je pense que mon problème n'était pas tellement dans la configuration montrée, mais avec la résolution de DNS, j'étais simplement confus. Une condition qui s'est beaucoup améliorée récemment. Il n'y a pas besoin d'être désolé pour moi, je trouve la documentation de core-Kubernetes, le contrôleur d'entrée nginx et même Microsoft pour l'intégration Azure très utile. Il y a juste beaucoup à prendre. Merci encore pour la réponse très utile. –