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 apache
und stellen sie in Ihrem Kubernetes-Cluster bereit.
-
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.
-
Erstellen Sie die Bereitstellung mit dem folgenden Befehl:
kubectl create -f apache-deployment.yaml
-
Stellen Sie mithilfe der folgenden Funktionen sicher, dass vier Pods ausgeführt werden:
kubectl get pods
-
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-->
-
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. -
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 Namenvpx-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-->
-
Stellen Sie das Ingress-Objekt bereit.
kubectl create -f vpx-ingress.yaml