Créez une passerelle d'entrée en suivant le modèle de la passerelle d'entrée préinstallée. Vous pouvez utiliser le fichier YAML de définition de passerelle suivant pour créer une passerelle. Dans le fichier YAML de définition de passerelle, remplacez
POD_NAMESPACE
par votre espace de noms, puis copiez et collez le code YAML dans un fichierGATEWAY_DEFINITION_FILE
. Veillez à modifier des ressources telles quePodDisruptionBudget
etHorizontalPodAutoscaler
en fonction de votre environnement.Définition de la passerelle YAML
apiVersion: v1 kind: ServiceAccount metadata: name: user-ingressgateway-service-account namespace: istio-system labels: app: istio-ingressgateway chart: gateways heritage: Tiller release: istio --- apiVersion: v1 kind: Service metadata: name: user-ingressgateway namespace: istio-system annotations: labels: chart: gateways heritage: Tiller release: istio app: istio-ingressgateway istio: ingressgateway spec: type: LoadBalancer selector: release: istio app: istio-ingressgateway istio: ingressgateway ports: - name: status-port port: 15020 targetPort: 15020 - name: http2 nodePort: 31380 port: 80 targetPort: 80 - name: https nodePort: 31390 port: 443 - name: tcp nodePort: 31400 port: 31400 - name: https-kiali port: 15029 targetPort: 15029 - name: https-prometheus port: 15030 targetPort: 15030 - name: https-grafana port: 15031 targetPort: 15031 - name: https-tracing port: 15032 targetPort: 15032 - name: tls port: 15443 targetPort: 15443 --- apiVersion: apps/v1 kind: Deployment metadata: name: user-ingressgateway namespace: istio-system labels: app: istio-ingressgateway chart: gateways heritage: Tiller istio: ingressgateway release: istio spec: selector: matchLabels: app: istio-ingressgateway istio: ingressgateway strategy: rollingUpdate: maxSurge: 100% maxUnavailable: 25% template: metadata: labels: app: istio-ingressgateway chart: gateways heritage: Tiller istio: ingressgateway release: istio annotations: sidecar.istio.io/inject: "false" spec: serviceAccountName: user-ingressgateway-service-account containers: - name: istio-proxy image: "gcr.io/istio-testing/proxyv2:1.4-dev" imagePullPolicy: IfNotPresent ports: - containerPort: 15020 - containerPort: 80 - containerPort: 443 - containerPort: 31400 - containerPort: 15029 - containerPort: 15030 - containerPort: 15031 - containerPort: 15032 - containerPort: 15443 - containerPort: 15090 protocol: TCP name: http-envoy-prom args: - proxy - router - --domain - POD_NAMESPACE.svc.cluster.local - --log_output_level=default:info - --drainDuration - '45s' #drainDuration - --parentShutdownDuration - '1m0s' #parentShutdownDuration - --connectTimeout - '10s' #connectTimeout - --serviceCluster - user-ingressgateway - --zipkinAddress - zipkin:9411 - --proxyAdminPort - "15000" - --statusPort - "15020" - --controlPlaneAuthPolicy - NONE - --discoveryAddress - istio-pilot:15010 readinessProbe: failureThreshold: 30 httpGet: path: /healthz/ready port: 15020 scheme: HTTP initialDelaySeconds: 1 periodSeconds: 2 successThreshold: 1 timeoutSeconds: 1 resources: limits: cpu: 2000m memory: 1024Mi requests: cpu: 100m memory: 128Mi env: - name: NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - name: POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace - name: INSTANCE_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.podIP - name: HOST_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.hostIP - name: SERVICE_ACCOUNT valueFrom: fieldRef: fieldPath: spec.serviceAccountName - name: ISTIO_META_POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: ISTIO_META_CONFIG_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: ISTIO_METAJSON_LABELS value: | {"app":"istio-ingressgateway","chart":"gateways","heritage":"Tiller","istio":"ingressgateway","release":"istio"} - name: ISTIO_META_CLUSTER_ID value: "Kubernetes" - name: SDS_ENABLED value: "false" - name: ISTIO_META_WORKLOAD_NAME value: user-ingressgateway - name: ISTIO_META_OWNER value: kubernetes://apis/apps/v1/namespaces/istio-system/deployments/user-ingressgateway - name: ISTIO_META_ROUTER_MODE value: sni-dnat volumeMounts: - name: istio-certs mountPath: /etc/certs readOnly: true - name: ingressgateway-certs mountPath: "/etc/istio/ingressgateway-certs" readOnly: true - name: ingressgateway-ca-certs mountPath: "/etc/istio/ingressgateway-ca-certs" readOnly: true volumes: - name: istio-certs secret: secretName: istio.user-ingressgateway-service-account optional: true - name: ingressgateway-certs secret: secretName: "istio-ingressgateway-certs" optional: true - name: ingressgateway-ca-certs secret: secretName: "istio-ingressgateway-ca-certs" optional: true affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - "amd64" - "ppc64le" - "s390x" preferredDuringSchedulingIgnoredDuringExecution: - weight: 2 preference: matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - "amd64" - weight: 2 preference: matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - "ppc64le" - weight: 2 preference: matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - "s390x" --- apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata: name: user-ingressgateway namespace: istio-system labels: chart: gateways heritage: Tiller release: istio app: istio-ingressgateway istio: ingressgateway spec: minAvailable: 1 selector: matchLabels: release: istio app: istio-ingressgateway istio: ingressgateway — apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: user-ingressgateway namespace: istio-system labels: chart: gateways heritage: Tiller release: istio app: istio-ingressgateway istio: ingressgateway spec: maxReplicas: 5 minReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: user-ingressgateway metrics: - type: Resource resource: name: cpu targetAverageUtilization: 80 ---
Appliquez le fichier de passerelle utilisateur au cluster:
kubectl apply -f GATEWAY_DEFINITION_FILE
Vérifiez qu'une adresse IP externe a été attribuée à la nouvelle passerelle:
kubectl get svc -n istio-system
Le résultat est semblable à ce qui suit, avec des adresses IP pour
istio-ingressgateway
et la passerelle que vous venez de créer. (Pour des raisons de concision, les autres services Istio sont omis.)NAME TYPE CLUSTER-IP EXTERNAL-IP istio-ingressgateway LoadBalancer 10.103.245.98 35.225.130.192 ... user-ingressgateway LoadBalancer 10.103.240.33 104.198.174.26 ...
Ajoutez une ressource de passerelle pour la nouvelle passerelle. Pour en savoir plus sur les passerelles, consultez la documentation de référence sur istio.io.
kind: Gateway metadata: name: user-gateway spec: selector: app: user-ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"
Modifiez tous les éléments
VirtualService
qui pointent vers la passerelle intégrée de sorte qu'ils pointent également vers la nouvelle passerelle. Voici le fichierVirtualService
modifié basé sur celui de l'exemple Bookinfo:apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: bookinfo spec: hosts: - "*" gateways: - bookinfo-gateway - user-gateway http: - match: - uri: exact: /productpage - uri: prefix: /static - uri: exact: /login - uri: exact: /logout - uri: prefix: /api/v1/products route: - destination: host: productpage port: number: 9080
Appliquez les nouvelles commandes
Gateway
etVirtualService
au cluster à l'aide de la commandekubectl apply
.Vérifiez que le trafic peut atteindre vos applications en utilisant les anciennes et les nouvelles adresses IP externes. Dans l'exemple Bookinfo, cette opération peut être effectuée avec curl aux adresses IP externes attribuées:
curl http://35.225.130.192/productpage curl http://104.198.174.26/productpage
Mettez à jour votre DNS ou votre équilibreur de charge pour acheminer le trafic vers la nouvelle adresse IP externe.
Supprimez toutes les références de
VirtualServices
à toutGateways
pointant vers l'entrée intégrée.Supprimez toutes les expressions
Gateways
pointant vers l'entrée intégrée.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2021-02-09 UTC.