StyleBook-Konfiguration

StyleBook, um eine grundlegende Lastausgleichskonfiguration zu erstellen

In diesem Abschnitt entwerfen Sie ein StyleBook, das eine Lastausgleichskonfiguration erstellt, die einen virtuellen Lastausgleichsserver, eine Dienstgruppe und eine Liste von Diensten umfasst. Das StyleBook bindet die Dienste an die Dienstgruppe und bindet die Dienstgruppe an den virtuellen Server.

Um eine grundlegende Lastausgleichskonfiguration zu erstellen, verwenden Sie das Beispiel StyleBook, lb-vserver, das Sie in StyleBook erstellt haben, um einen virtuellen Lastausgleichsserverzu erstellen, und speichern Sie es als basic-lb-config.yaml.

Um dieses StyleBook zu erstellen, aktualisieren Sie den Header-Abschnitt. Dieser Abschnitt ähnelt dem Header-Abschnitt, den Sie in StyleBook erstellt haben, um einen virtuellen Lastausgleichsserver zu erstellen.

Ändern Sie den Wert von name in basic-lb-config. Aktualisieren Sie die Beschreibung und den Anzeigenamen, um das StyleBook zu beschreiben. Sie müssen den Namespace und die Versionswerte nicht ändern. Da Sie den Namen geändert haben, wird im System eine eindeutige Kennung für dieses StyleBook erstellt.

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"
<!--NeedCopy-->

StyleBooks importieren

Der Abschnitt Import-StyleBooks bleibt unverändert. Es bezieht sich 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

Aktualisieren Sie den Parameterbereich, um zwei weitere Parameter hinzuzufügen.

Die Parameter definieren die Liste der Dienste oder Server und den Port, auf dem die Dienste zuhören. Die ersten drei Parameter name, ip und lb-alg bleiben gleich.

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
 -
  name: svc-port
  type: tcp-port
  label: Server Port
  description: The TCP port open on the application servers to receive requests.
  default: 80
<!--NeedCopy-->

Der Parameter svc-servers wird hinzugefügt, um eine Liste von IP-Adressen der Backend-Server der Anwendung zu akzeptieren. svc-servers ist ein obligatorischer Parameter, wie durch required: true angegeben.

Der zweite Parameter, svc-port, gibt die Portnummer an, auf die die Server lauschen. Die Standardportnummer ist 80, sofern nicht vom Benutzer angegeben.

Komponenten

Sie müssen auch den Komponentenbereich aktualisieren, um weitere Komponenten so zu definieren, dass sie die beiden neuen Parameter verwenden und die vollständige Lastausgleichskonfiguration erstellen.

Für dieses Beispiel müssen Sie den Komponentenabschnitt 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) jetzt eine untergeordnete Komponente namens svcg-comp. Die svcg-comp-Komponente enthält auch zwei untergeordnete Komponenten. Durch das Verschachteln einer Komponente innerhalb einer anderen Komponente kann die verschachtelte Komponente Konfigurationsobjekte erstellen, indem sie auf Attribute in der übergeordneten Komponente verweist. Die verschachtelte Komponente kann für jedes Objekt, das in der übergeordneten Komponente erstellt wurde, ein oder mehrere Objekte erstellen.

Die Komponente svcg-comp wird verwendet, um eine Dienstgruppe auf der NetScaler-Instanz zu erstellen, indem die für die Attribute der Ressource angegebenen Werte verwendet werden servicegroup. In diesem Beispiel geben Sie den statischen Wert für servicetype an, während Name seinen Wert aus dem Eingabeparameter bezieht. Verweisen Sie auf den im Parameterabschnitt definierten Parameternamen, indem Sie die Notation $parameters.name + “-svcgrp” verwenden, wobei “-svcgrp” an den benutzerdefinierten Namen angehängt (verkettet) wird.

Die Komponente svcg-comp hat zwei untergeordnete Komponenten, lbvserver-svg-binding-comp und members-svcg-comp.

Die erste untergeordnete Komponente, lbvserver-svg-binding-comp, wird verwendet, um ein Konfigurationsobjekt zwischen der von ihrer übergeordneten Komponente erstellten Servicegruppe und dem virtuellen Lastausgleichsserver (lbvserver) zu binden, der von der übergeordneten Komponente des Elternteils erstellt wurde. Die $parent Notation, auch übergeordnete Referenz genannt, wird verwendet, um auf Entitäten in den übergeordneten Komponenten zu verweisen. Beispielsweise bezieht sich servicegroupname: $parent.properties.name auf die Dienstgruppe, die von der übergeordneten Komponente svcg-comperstellt wurde, und name: $parent.parent.properties.name bezieht sich auf den virtuellen Server, der von der übergeordneten Komponente lbvserver-compdes übergeordneten Elements erstellt wurde.

Die members-svcg-Komponente wird verwendet, um Konfigurationsobjekte zwischen der Liste der Dienste an die von der übergeordneten Komponente erstellte Dienstgruppe zu binden. Die Erstellung mehrerer Bindungskonfigurationsobjekte wird erreicht, indem das repeat-Konstrukt von StyleBook verwendet wird, um über die Liste der Server zu iterieren, die im Parameter svc-servers angegeben ist. Während der Iteration erstellt diese StyleBook-Komponente ein NITRO-Konfigurationsobjekt vom Typ servicegroup_servicegroupmember_binding für jeden Dienst (wie srv im repeat-Item-Konstrukt bezeichnet) in der Servicegruppe und legt das ip-Attribut in jeder NITRO-Konfigurationsobjekt der 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, z. B. srv, um den aktuellen Wert in der Iteration zu bestimmen. Dieser Variablenname wird in den Eigenschaften derselben Komponente oder in untergeordneten Komponenten wie $<varname>, z. B. $srv bezeichnet.

Im vorherigen Beispiel hilft die Verschachtelung von Komponenten dabei, die Konfiguration einfach zu erstellen. Sie können die Konfiguration auch ohne Verschachtelung erstellen, wie im folgenden Beispiel gezeigt:

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  
<!--NeedCopy-->

Auch wenn die Komponenten nicht verschachtelt sind, entspricht die generierte NetScaler-Konfiguration der zuvor verwendeten verschachtelten Komponenten.

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 sie zuletzt deklariert wurden, vor dem Erstellen der zweiten Komponente lbvserver-svg-binding-comp erstellt werden, da in der zweiten Komponente Weiterleitungsverweise auf diese Komponenten vorhanden sind.

Hinweis

Konventionell werden die Namen von StyleBooks, Parametern, Substitutionen, Komponenten und Ausgaben in Kleinbuchstaben geschrieben. Wenn sie viele Wörter enthalten, werden sie durch ein “-“-Zeichen getrennt. Zum Beispiel lb-bindings, app-name, rewrite-config und so weiter. Eine andere Konvention besteht darin, an Komponentennamen als Suffix die Zeichenfolge -comp anzuhängen.

Ausgaben

In diesem Abschnitt müssen Sie angeben, was das StyleBook den Benutzern (oder anderen StyleBooks) zur Verfügung stellt, nachdem es eine Konfiguration erstellt hat. Sie können beispielsweise angeben, dass die Konfigurationsobjekte lbvserver und servicegroup, die von diesem StyleBook erstellt werden, verfügbar gemacht werden sollen.

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 Ausgabebereich eines StyleBook ist optional. Ein StyleBook muss keine Ausgaben zurückgeben. Durch die Rückgabe einiger interner Komponenten als Ausgaben erhalten alle StyleBooks, die dieses StyleBook importieren, jedoch mehr Flexibilität. Diese Funktion ist nützlich, wenn Sie ein zusammengesetztes StyleBook erstellen.

Hinweis

Es empfiehlt sich, eine gesamte Komponente des StyleBook im Ausgabeabschnitt verfügbar zu machen und nicht nur eine einzelne Eigenschaft einer Komponente verfügbar zu machen (z. B. die gesamte $components.lbvserver-comp und nicht 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.

Erstellen Sie Ihr StyleBook

Nachdem Sie 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.yamlgespeichert. Citrix empfiehlt, den integrierten YAML-Validator in StyleBooks zu verwenden, um den YAML-Inhalt zu validieren und zu importieren.

Der vollständige Inhalt der Datei basic-lb-config.yaml wird wie folgt 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
 -
  name: svc-port
  type: tcp-port
  label: Server Port
  description: The TCP port open on the application servers to receive requests.
  default: 80

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 die NetScaler Console importieren und dann verwenden. Weitere Informationen finden Sie unter Verwenden von benutzerdefinierten StyleBooks.

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

StyleBook, um eine grundlegende Lastausgleichskonfiguration zu erstellen