2017-04-03 3 views
1

Also ich benutze Kubernetes für ein Nebenprojekt und es ist großartig. Es ist billiger, für ein kleines Projekt wie das, auf dem ich bin, zu laufen (ein kleiner Cluster von 3-5 Instanzen gibt mir im Grunde alles, was ich für ~ 30 $/Monat auf GCP brauche).Erstellen kubernetes nginx ingress ohne GCP load-balancer

Der einzige Bereich, in dem ich Probleme habe, ist der Versuch, die kubernetes Ingress-Ressource zu verwenden, um Cluster zuzuordnen und auf meine Microservices zu fächern (kleine Go- oder Knoten-Backends). Ich habe das Konfigurations-Setup für den Eintritt zu verschiedenen Diensten zugeordnet und es gibt kein Problem dort.

Ich verstehe, dass Sie GCP sehr leicht einen LoadBalancer hochfahren lassen können, wenn Sie eine Ingress-Ressource erstellen. Das ist in Ordnung, aber es stellt auch einen weiteren $ 20-ish/Monat dar, der die Kosten des Projekts erhöht. Einmal/wenn diese Sache einig Traktion wird, wird das könnte ignoriert, aber jetzt und auch im Interesse der Verständigung Kubernetes besser, ich will die folgenden tun:

  • eine statische IP von GCP erhalten,
  • verwenden sie es w/eine Eingang Ressource
  • Host des Lastenausgleich in demselben Cluster (den nginx-Load-Balancer)
  • vermeiden für die externe Load Balancer

gibt es eine Möglichkeit der Zahlung kann dies sogar mit Kub gemacht werden ernetes und ingress Ressourcen?

Danke!

+0

genausogut mit nginx-Ingress arbeitet Glücklich meine vorhandene configs zu schreiben, wenn nötig - nur neugierig zuerst, wenn dies auch etwas, was Sie tun können, :) – markthethomas

+0

Ganz zu schweigen von vielen K8-Tools, die inaktive Load Balancer hinter sich lassen, für mich ging es für unbrauchbare Load Balancer auf 30 $ pro Monat. –

Antwort

2

Ja, das ist möglich. Stellen Sie Ihren Ingress-Controller bereit und stellen Sie ihn mit einem NodePort-Dienst bereit. Beispiel:

--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: nginx-ingress-controller 
    namespace: kube-system 
    labels: 
    k8s-app: nginx-ingress-controller 
spec: 
    type: NodePort 
    ports: 
    - port: 80 
    targetPort: 80 
    nodePort: 32080 
    protocol: TCP 
    name: http 
    - port: 443 
    targetPort: 443 
    nodePort: 32443 
    protocol: TCP 
    name: https 
    selector: 
    k8s-app: nginx-ingress-controller 

nun ein Eindringen mit einem DNS-Eintrag erstellen:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: my-ingress 
spec: 
    rules: 
    - host: myapp.example.com 
    http: 
     paths: 
     - path:/
     backend: 
      serviceName: my-app-service #obviously point this to a valid service + port 
      servicePort: 80 

Nun, vorausgesetzt, Ihre statische IP zu jedem Kubernetes Knoten befestigt läuft kube-Proxy hat DNS aktualisiert, um die Punkt statische IP, und Sie sollten in der Lage sein, myapp.example.com:32080 zu besuchen und der Eingang wird Sie zurück zu Ihrer App zuordnen.

Ein paar zusätzliche Dinge: wenn Sie mit CNI-Networking

Wenn Sie einen niedrigeren Port als 32080 verwenden möchten, tragen dann im Auge, you'll have trouble with hostport. Es wird empfohlen, einen Load-Balancer auf Port 80 zu hören. Ich nehme an, Sie könnten einfach nginx einrichten, um einen Proxy-Pass zu machen, aber es wird schwierig. Aus diesem Grund wird ein Load Balancer mit Ihrem Cloud-Provider empfohlen :)

Verwandte Themen