Application Delivery Management

StyleBook zum Erstellen einer grundlegenden Lastverteilungskonfiguration

Im vorherigen Beispiel haben Sie ein grundlegendes StyleBook zum Erstellen eines virtuellen Lastverteilungsservers erstellt. Sie können dieses StyleBook unter einem anderen Namen speichern und es dann aktualisieren, um zusätzliche Parameter und Komponenten für eine grundlegende Lastverteilungskonfiguration aufzunehmen. Speichern Sie diese StyleBook-Datei als basic-lb-config.yaml.

In diesem Abschnitt entwerfen Sie ein neues StyleBook, das eine Lastverteilungskonfiguration erstellt, die aus einem virtuellen Lastverteilungsserver, einer Dienstgruppe und einer Liste von Diensten besteht. Es bindet auch die Dienste an die Dienstgruppe und die Dienstgruppe an den virtuellen Server.

Um dieses StyleBook zu erstellen, müssen Sie zunächst den Header-Abschnitt aktualisieren. Dieser Abschnitt ähnelt dem, den Sie für das StyleBook des virtuellen Lastverteilungsservers erstellt haben. Ändern Sie im Header-Abschnitt den Wert von name in basic-lb-config. Aktualisieren Sie außerdem description und display-name, um dieses StyleBook entsprechend zu beschreiben. Sie müssen die Werte für namespace und version nicht ändern. Da Sie den Namen geändert haben, bildet die Kombination aus Name, Namespace und Version einen eindeutigen Bezeichner für dieses StyleBook im System.

name: basic-lb-config
description: This StyleBook defines a simple load balancing configuration.
display-name: Load Balancing Configuration
namespace: com.example.stylebooks
schema-version: "1.0"
version: "0.1"
<!--NeedCopy-->

StyleBooks importieren

Der Abschnitt import-stylebooks bleibt unverändert. Er verweist auf den Namespace netscaler.nitro.config, um die Nitro-Konfigurationsobjekte zu verwenden.

import-stylebooks:
 -
 namespace: netscaler.nitro.config
 prefix: ns
 version: "10.5"
<!--NeedCopy-->

Parameter

Sie müssen den Abschnitt parameters aktualisieren, um zwei zusätzliche Parameter hinzuzufügen, die die Liste der Dienste oder Server und den Port definieren, an dem die Dienste lauschen. Die ersten drei Parameter, name, ip und lb-alg, bleiben unverändert.

parameters:
 -
 name: name
 type: string
 label: Application Name
 description: Name of the application configuration
 required: true
  -
   name: ip
   type: ipaddress
   label: Application Virtual IP (VIP)
   description: Application VIP that the clients access
   required: true
  -
   name: lb-alg
   type: string
   label: LoadBalancing Algorithm
   description: Choose the load balancing algorithm used for load balancing client requests between the application servers.
     allowed-values:
     -  ROUNDROBIN
     -  LEASTCONNECTION
      default: ROUNDROBIN
  -
   name: svc-servers
   type: ipaddress\[\]
   label: Application Server IPs
   description: The IP addresses of all the servers of this application
   required: true
  -
   name: svc-port
   type: tcp-port
   label: Server Port
   description: The TCP port open on the application servers to receive requests.
   default: 80
<!--NeedCopy-->

In diesem Beispiel wird der Parameter svc-servers hinzugefügt, um eine Liste von IP-Adressen der Dienste zu akzeptieren, die die Backend-Server der Anwendung darstellen. Dies ist ein obligatorischer Parameter, wie durch required: true angegeben. Der zweite Parameter, svc-port, bezeichnet die Portnummer, an der die Server lauschen. Die Standard-Portnummer ist 80 für den Parameter svc-port, wenn sie vom Benutzer nicht angegeben wird.

Komponenten

Sie müssen auch den Abschnitt components aktualisieren, um zusätzliche Komponenten zu definieren, die die beiden neuen Parameter verwenden und die vollständige Lastverteilungskonfiguration erstellen.

Für dieses Beispiel müssen Sie den Abschnitt components wie folgt schreiben:

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg

components:
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
   name: $parameters.name + "-svcgrp"
   servicetype: HTTP
  
components:
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver\_servicegroup\_binding
  properties:
   name: $parent.parent.properties.name
   servicegroupname: $parent.properties.name
 -
  name: members-svcg-comp
  type: ns::servicegroup\_servicegroupmember\_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: str($parameters.svc-port)
   servicegroupname: $parent.properties.name
<!--NeedCopy-->

In diesem Beispiel hat die ursprüngliche Komponente lbvserver-comp (aus dem vorherigen Beispiel) nun eine Kindkomponente namens svcg-comp. Und die Komponente svcg-comp hat zwei Kindkomponenten in sich. Das Verschachteln einer Komponente in einer anderen Komponente ermöglicht es der verschachtelten Komponente, Konfigurationsobjekte zu erstellen, indem sie auf Attribute in der übergeordneten Komponente verweist. Die verschachtelte Komponente kann ein oder mehrere Objekte für jedes Objekt erstellen, das in der übergeordneten Komponente erstellt wird.

Die Komponente svcg-comp wird verwendet, um eine Dienstgruppe auf der NetScaler-Instanz zu erstellen, indem die für die Attribute der Ressource „servicegroup“ bereitgestellten Werte verwendet werden. In diesem Beispiel geben Sie einen statischen Wert für servicetype an, während name seinen Wert vom Eingabeparameter erhält. Sie verweisen auf den im Abschnitt parameters definierten Parameter name mithilfe der Notation $parameters.name + “-svcgrp”, wobei -svcgrp an den benutzerdefinierten Namen angehängt (verkettet) wird.

Die Komponente svcg-comp hat zwei Kindkomponenten: lbvserver-svg-binding-comp und members-svcg-comp.

Die erste Kindkomponente, lbvserver-svg-binding-comp, wird verwendet, um ein Konfigurationsobjekt zwischen der von ihrer übergeordneten Komponente erstellten Dienstgruppe und dem vom übergeordneten Elternteil erstellten virtuellen Lastverteilungsserver (lbvserver) zu binden. Die $parent-Notation, auch als Elternreferenz bezeichnet, wird verwendet, um auf Entitäten in den übergeordneten Komponenten zu verweisen. Zum Beispiel verweist servicegroupname: $parent.properties.name auf die von der übergeordneten Komponente svcg-comp erstellte Dienstgruppe, und name: $parent.parent.properties.name verweist auf den vom übergeordneten Elternteil lbvserver-comp erstellten virtuellen Server.

Die Komponente members-svcg wird verwendet, um Konfigurationsobjekte zwischen der Liste der Dienste und der von der übergeordneten Komponente erstellten Dienstgruppe zu binden. Die Erstellung mehrerer Bindungskonfigurationsobjekte wird durch die Verwendung des repeat-Konstrukts von StyleBook erreicht, um über die im Parameter svc-servers angegebene Serverliste zu iterieren. Während der Iteration erstellt diese StyleBook-Komponente ein Nitro-Konfigurationsobjekt vom Typ servicegroup_servicegroupmember_binding für jeden Dienst (im repeat-item-Konstrukt als srv bezeichnet) in der Dienstgruppe und setzt das Attribut ip in jedem Nitro-Konfigurationsobjekt auf die IP-Adresse des entsprechenden Servers.

Im Allgemeinen können Sie die Konstrukte repeat und repeat-item in einer Komponente verwenden, damit diese Komponente mehrere Konfigurationsobjekte desselben Typs erstellt. Sie können dem repeat-item-Konstrukt einen Variablennamen zuweisen, zum Beispiel srv, um den aktuellen Wert in der Iteration zu bezeichnen. Dieser Variablenname wird in den Eigenschaften derselben Komponente oder in Kindkomponenten als <Variablenname> referenziert, zum Beispiel $srv.

Im obigen Beispiel haben Sie die Verschachtelung von Komponenten verwendet, um diese Konfiguration einfach zu erstellen. In diesem speziellen Fall war die Verschachtelung von Komponenten nicht die einzige Möglichkeit, die Konfiguration zu erstellen. Sie hätten dasselbe Ergebnis auch ohne Verschachtelung erzielen können, wie unten gezeigt:

components:
 -
  name: members-svcg-comp
  type: ns::servicegroup\_servicegroupmember\_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: str($parameters.svc-port)
   servicegroupname: $components.svcg-comp.properties.name
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver\_servicegroup\_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.name
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
  name: $parameters.name + "-svcgrp"
  servicetype: HTTP  
<!--NeedCopy-->

Hier befinden sich alle Komponenten auf derselben Ebene (d.h. sie sind nicht verschachtelt), aber das erzielte Ergebnis (die generierte NetScaler-Konfiguration) ist dasselbe wie bei den zuvor verwendeten verschachtelten Komponenten. Auch die Reihenfolge, in der die Komponenten im StyleBook deklariert werden, hat keinen Einfluss auf die Reihenfolge der Erstellung der Konfigurationsobjekte. In diesem Beispiel müssen die Komponenten svcg-comp und lbvserver-comp, obwohl zuletzt deklariert, vor der Erstellung der zweiten Komponente lbvserver-svg-binding-comp erstellt werden, da es in der zweiten Komponente Vorwärtsreferenzen auf diese Komponenten gibt.

Hinweis

Konventionell werden die Namen von StyleBooks, Parametern, Substitutionen, Komponenten und Ausgaben in Kleinbuchstaben geschrieben. Wenn sie aus mehreren Wörtern bestehen, werden sie durch einen Bindestrich („-“) getrennt. Zum Beispiel „lb-bindings“, „app-name“, „rewrite-config“ und so weiter. Eine weitere Konvention ist, Komponentennamen mit der Zeichenfolge „-comp“ zu versehen.

Ausgaben

Der letzte Abschnitt, den Sie dem neuen StyleBook hinzufügen können, ist der outputs-Abschnitt, in dem Sie angeben, was dieses StyleBook seinen Benutzern (oder in anderen StyleBooks) nach der Verwendung zur Erstellung einer Konfiguration zur Verfügung stellt. Zum Beispiel können Sie im outputs-Abschnitt festlegen, dass die lbvserver- und servicegroup-Konfigurationsobjekte, die von diesem StyleBook erstellt würden, offengelegt werden.

outputs:
 -
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: The component that builds the Nitro lbvserver configuration object
 -
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->

Der outputs-Abschnitt eines StyleBooks ist optional. Ein StyleBook muss keine Ausgaben zurückgeben. Wenn es jedoch einige interne Komponenten als Ausgaben zurückgibt, bietet es StyleBooks, die dieses StyleBook importieren, mehr Flexibilität, wie Sie beim Erstellen eines zusammengesetzten StyleBooks sehen können.

Hinweis

Es ist eine gute Praxis, eine gesamte Komponente des StyleBooks im outputs-Abschnitt offenzulegen, anstatt nur eine einzelne Eigenschaft einer Komponente (zum Beispiel die gesamte $components.lbvserver-comp offenzulegen, anstatt nur den Namen $components.lbvserver-comp.properties.name). Fügen Sie der Ausgabe auch eine Beschreibung hinzu, die erklärt, was die spezifische Ausgabe darstellt.

Ihr StyleBook erstellen

Nachdem Sie nun alle erforderlichen Abschnitte dieses StyleBooks definiert haben, fügen Sie sie alle zusammen, um Ihr zweites StyleBook zu erstellen. Sie haben diese StyleBook-Datei bereits als basic-lb-config.yaml gespeichert. Citrix empfiehlt, den integrierten YAML-Validator auf der StyleBooks-Seite zu verwenden, um den YAML-Inhalt zu validieren und zu importieren.

Der vollständige Inhalt der Datei basic-lb-config.yaml ist unten wiedergegeben:

name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"

import-stylebooks:
 -
  namespace: netscaler.nitro.config
  version: "10.5"
  prefix: ns
parameters:
 -
  name: name
  type: string
  label: Application Name
  description: Give a name to the application configuration.
  required: true
 -
  name: ip
  type: ipaddress
  label: Application Virtual IP (VIP)
  description: The Application VIP that clients access
  required: true
 -
  name: lb-alg
  type: string
  label: LoadBalancing Algorithm
  description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
  allowed-values:
     -  ROUNDROBIN
     -  LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: Application Server IPs
  description: The IP addresses of all the servers of this application
  required: true

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
    servicegroupname: $parameters.name + "-svcgrp"
    servicetype: HTTP
  
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.servicegroupname
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: 80
   servicegroupname: $components.svcg-comp.properties.servicegroupname
outputs:
-
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: The component that builds the Nitro lbvserver configuration object
-
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->

Um Ihr StyleBook zum Erstellen von Konfigurationen zu verwenden, müssen Sie es in NetScaler ADM importieren und dann verwenden. Weitere Informationen finden Sie unter Verwenden benutzerdefinierter StyleBooks.

Sie können dieses StyleBook auch in andere StyleBooks importieren und dessen Eigenschaften wie im nächsten Abschnitt beschrieben verwenden.

StyleBook zum Erstellen einer grundlegenden Lastverteilungskonfiguration