Implementierung eines Service Mesh in Beego mit Kubernetes und Istio

王林
Freigeben: 2023-06-22 10:20:16
Original
699 Leute haben es durchsucht

Kubernetes und Istio haben sich in den letzten Jahren zu zwei unverzichtbaren Werkzeugen auf dem Weg zu Cloud-nativen Anwendungen entwickelt. Kubernetes ist ein Container-Orchestrierungstool, das Benutzern hilft, Containeranwendungen automatisch bereitzustellen, zu erweitern und zu verwalten, während Istio ein Service Mesh ist, das Benutzern eine bessere Verwaltung und Überwachung von Microservice-Architekturen ermöglicht. In diesem Artikel stellen wir vor, wie man ein Service Mesh mit Kubernetes und Istio im Beego-Framework implementiert.

Zuerst müssen wir unsere Beego-Anwendung auf Kubernetes bereitstellen. Der Einfachheit halber verwenden wir Minikube, um einen lokalen Kubernetes-Cluster auszuführen. Nach der Installation von Minikube und dem Kubernetes-Client können wir den Cluster mit dem folgenden Befehl starten:

minikube start
Nach dem Login kopieren

Dann müssen wir eine Kubernetes-Bereitstellung für die Bereitstellung unserer Beego-Anwendung erstellen. Wir können unsere Bereitstellung mithilfe der folgenden YAML-Datei definieren:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: beego-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: beego-app
  template:
    metadata:
      labels:
        app: beego-app
    spec:
      containers:
      - name: beego-app
        image: my-beego-app-image
        ports:
        - containerPort: 8080
Nach dem Login kopieren

In dieser YAML-Datei definieren wir eine Bereitstellung namens „beego-app“ zum Ausführen unserer Beego-Anwendung, die in einem Container ausgeführt wird, und stellen den Dienst auf Port 8080 bereit.

Als nächstes müssen wir einen Kubernetes-Dienst erstellen, um von außerhalb des Kubernetes-Clusters auf unsere Beego-Anwendung zuzugreifen. Wir können unseren Dienst mithilfe der folgenden YAML-Datei definieren:

apiVersion: v1
kind: Service
metadata:
  name: beego-app-service
spec:
  selector:
    app: beego-app
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080
  type: NodePort
Nach dem Login kopieren

In dieser YAML-Datei definieren wir einen Dienst namens „beego-app-service“, der auf unsere Beego-Bereitstellung verweist und Port 80 dem Container-Port 8080 zuordnet. Darüber hinaus haben wir den Diensttyp auch als NodePort angegeben, was bedeutet, dass Kubernetes eine Knoten-IP und einen Knoten-Port für den Zugriff auf den Dienst zuweist.

Wir können nun die Bereitstellung und den Dienst erstellen, indem wir den folgenden Befehl verwenden:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Nach dem Login kopieren

Nach diesen Schritten ist unsere Beego-Anwendung jetzt außerhalb des Kubernetes-Clusters zugänglich. Allerdings müssen wir auch Service Discovery und Load Balancing innerhalb des Clusters implementieren.

Hier kommt Istio ins Spiel. Mit Istio können wir die Kommunikation und den Lastausgleich zwischen internen Diensten einfach implementieren. Nach der Installation von Istio in unserem Kubernetes-Cluster können wir die automatische Istio-Injektion mit dem folgenden Befehl aktivieren:

kubectl label namespace default istio-injection=enabled
Nach dem Login kopieren

Anschließend können wir einen virtuellen Istio-Dienst definieren, um HTTP-Anfragen an unsere Beego-Anwendung weiterzuleiten, indem wir die folgende YAML-Datei verwenden:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: beego-app-virtual-service
spec:
  hosts:
  - "*"
  gateways:
  - istio-system/ingressgateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: beego-app-service.default.svc.cluster.local
        port:
          number: 80
Nach dem Login kopieren

in In In dieser YAML-Datei definieren wir einen virtuellen Dienst namens „beego-app-virtual-service“, der HTTP-Anfragen an den zuvor erstellten Dienst „beego-app-service“ weiterleitet und ihn Port 80 zuordnet.

Wenn der virtuelle Dienst aktiviert ist, können wir jetzt innerhalb des Clusters auf unsere Beego-Anwendung zugreifen. Um unser Service Mesh jedoch besser zu verwalten, können wir auch die Überwachungs- und Tracing-Funktionen von Istio nutzen. Beispielsweise können wir mithilfe der folgenden YAML-Datei eine Istio-Zielregel definieren, um Tracking und Metriken für den gesamten ein- und ausgehenden Datenverkehr zu ermöglichen:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: beego-app-destination-rule
spec:
  host: beego-app-service.default.svc.cluster.local
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
    portLevelSettings:
    - port:
        number: 80
      tls:
        mode: ISTIO_MUTUAL
    connectionPool:
      http:
        http1MaxPendingRequests: 100
        maxRequestsPerConnection: 5
      tcp:
        maxConnections: 1000
    outlierDetection:
      consecutiveErrors: 5
      interval: 5s
      baseEjectionTime: 30s
      maxEjectionPercent: 50
Nach dem Login kopieren

In dieser YAML-Datei definieren wir eine Istio-Zielregel mit dem Namen „beego-app-destination-rule“. Wird zum Definieren der Verkehrskontroll- und Fehlererkennungsrichtlinien von Istio verwendet.

Durch die Verwendung von Kubernetes und Istio zur Implementierung eines Service Mesh können wir unsere Microservice-Architektur besser verwalten und überwachen. In diesem Beitrag haben wir erläutert, wie wir unsere Anwendungen mithilfe von Kubernetes und Istio im Beego-Framework bereitstellen und verwalten.

Das obige ist der detaillierte Inhalt vonImplementierung eines Service Mesh in Beego mit Kubernetes und Istio. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!