Citrix ADC Ingress Controller

Expose Service vom Typ NodePort mit Ingress

In einer einstufigen Bereitstellung empfängt der Ingress Citrix ADC (VPX oder MPX) außerhalb des Kubernetes-Clusters den gesamten Ingress-Datenverkehr zu den Microservices, die im Kubernetes-Cluster bereitgestellt werden. Damit der Ingress-Datenverkehr die Microservices erreicht, müssen Sie Netzwerkkonnektivität zwischen der Ingress Citrix ADC-Instanz und den Pods herstellen.

Da Pods im Overlay-Netzwerk ausgeführt werden, sind die Pod-IP-Adressen private IP-Adressen, und die Citrix ADC-Instanz von Ingress kann die Microservices, die in den Pods ausgeführt werden, nicht erreichen. Um den Dienst von außerhalb des Clusters zugänglich zu machen, können Sie den Dienst vom Typ NodePorterstellen. Die Citrix ADC-Instanz gleicht den Ingress-Datenverkehr auf die Knoten aus, die die Pods enthalten.

Um den Dienst vom Typ NodePortzu erstellen, geben Sie in Ihrer Dienstdefinitionsdatei einen Port im Bereich 30000—32767 an spec.type:NodePort und geben Sie ihn optional an.

Beispiel-Bereitstellung

Stellen Sie sich ein Szenario vor, in dem Sie einen NodePort-basierten Dienst verwenden, z. B. eine apache App, und die App mithilfe eines Ingress dem Nord-Süd-Verkehr aussetzen möchten. In diesem Fall müssen Sie die apache App-Bereitstellung erstellen, den Typdienst definieren und eine Ingress-Definition erstellen NodePort, um Ingress Citrix ADC so zu konfigurieren, dass der Nord-Süd-Datenverkehr an den Knotenport der apache App gesendet wird.

In diesem Beispiel erstellen Sie eine Bereitstellung mit dem Namen apacheund stellen sie in Ihrem Kubernetes-Cluster bereit.

  1. Erstellen Sie ein Manifest für die Bereitstellung mit dem Namen apache-deployment.yaml.

    # If using this on GKE
    # Make sure you have cluster-admin role for your account
    # kubectl create clusterrolebinding citrix-cluster-admin --clusterrole=cluster-admin --user=<username of your google account>
    #
    
    #For illustration a basic apache web server is used as a application
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: apache
      labels:
          name: apache
    spec:
      selector:
        matchLabels:
          app: apache
      replicas: 4
      template:
        metadata:
          labels:
            app: apache
        spec:
          containers:
          - name: apache
            image: httpd:latest
            ports:
            - name: http
              containerPort: 80
            imagePullPolicy: IfNotPresent
    <!--NeedCopy-->
    

    Container in dieser Bereitstellung hören auf Port 80.

  2. Erstellen Sie die Bereitstellung mit dem folgenden Befehl:

    kubectl create -f apache-deployment.yaml
    
  3. Stellen Sie mithilfe der folgenden Funktionen sicher, dass vier Pods ausgeführt werden:

    kubectl get pods
    
  4. Nachdem Sie überprüft haben, dass die Pods betriebsbereit sind, erstellen Sie einen Dienst des Typs NodePort. Das Folgende ist ein Manifest für den Dienst:

    #Expose the apache web server as a Service
    apiVersion: v1
    kind: Service
    metadata:
      name: apache
      labels:
        name: apache
    spec:
      type: NodePort
      ports:
      - name: http
        port: 80
        targetPort: http
      selector:
        app: apache
    <!--NeedCopy-->
    
  5. Kopieren Sie das Manifest in eine Datei mit dem Namen apache-service.yaml und erstellen Sie den Dienst mit dem folgenden Befehl:

    kubectl create -f apache-service.yaml
    

    Das Beispiel stellt den Apache-Webserver als Dienst bereit und macht ihn verfügbar. Sie können über die <NodeIP>:<NodePort> Adresse auf den Dienst zugreifen.

  6. Nachdem Sie den Dienst bereitgestellt haben, erstellen Sie eine Ingress-Ressource, um den Ingress Citrix ADC so zu konfigurieren, dass der Nord-Süd-Datenverkehr an den Knotenport der apache App gesendet wird. Das Folgende ist ein Manifest für die Ingress-Definition mit dem Namen vpx-ingress.yaml.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        ingress.citrix.com/frontend-ip: xx.xxx.xxx.xx
      name: vpx-ingress
    spec:
      defaultBackend:
        service:
          name: apache
          port:
            number: 80
    <!--NeedCopy-->
    
  7. Stellen Sie das Ingress-Objekt bereit.

    kubectl create -f vpx-ingress.yaml
    
Expose Service vom Typ NodePort mit Ingress

In diesem Artikel