La définition de ressource personnalisée (CRD) ASMEgressTrafficPolicy définit comment une passerelle de sortie achemine le trafic sortant des services du maillage vers des destinations externes. En combinant les proxies sidecar et les politiques d'autorisation, vous contrôlez le trafic sortant de manière globale.
Requiert Service Mesh (ASM) version 1.16.4 ou ultérieure.
Exemples YAML
Acheminer un service vers un endpoint externe via HTTP
Le service sleep-a du namespace mytest accède à http://www.httpbin.org via la passerelle de sortie egressgateway-a sur le port 80.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a # Name corresponds to the egress gateway.
namespace: istio-egress # Fixed namespace for egress policies.
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org # Multiple domains that resolve to the same address.
- httpbin.org
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # Traffic path: Sidecar -> port 80 on gateway -> port 80 on httpbin.org
Flux de trafic : Le proxy sidecar intercepte la requête sortante de sleep-a, la transfère vers le port 80 de la passerelle de sortie, qui l'envoie ensuite au port 80 de httpbin.org.
Mettre à niveau HTTP vers HTTPS et acheminer plusieurs services
Cet exemple définit trois règles de trafic sortant via la même passerelle :
| Service source | Destination externe | Port de la passerelle | Protocole | Mise à niveau HTTPS |
|---|---|---|---|---|
sleep-a (mytest) |
httpbin.org | 80 | HTTP | Oui (port 443) |
sleep-a (mytest) |
httpbin.org | 444 | HTTPS | Non |
sleep-b (mytest) |
www.aliyun.com | 445 | HTTPS | Non |
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a
namespace: istio-egress
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org
- httpbin.org
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80
httpsUpgrade:
enabled: true # Set to false to disable the upgrade. The port below is ignored when disabled.
port: 443 # Traffic path: Sidecar -> port 80 on gateway -> port 443 on httpbin.org (HTTPS)
- name: httpbin-service-https
hosts:
- www.httpbin.org
- httpbin.org
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 444
- from:
- namespace: mytest
workloadSelector:
app: sleep-b
to:
- name: aliyun-service-https
hosts:
- www.aliyun.com
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 445
La première règle illustre la mise à niveau HTTPS : le sidecar envoie du HTTP sur le port 80 à la passerelle, qui établit ensuite une connexion HTTPS sur le port 443 vers httpbin.org. L'application envoie du HTTP en clair tandis que la passerelle gère TLS.
Acheminer le trafic HTTP et TCP avec allocation automatique des ports
À partir d'ASM 1.24.6.45, ASMEgressTrafficPolicy prend en charge le protocole TCP. Lorsque tous les champs byEgressGateway sont omis dans les sections to, ASM alloue automatiquement des ports de transfert sur la passerelle de sortie à partir de la plage par défaut 10000–20000. Ces ports attribués automatiquement sont internes et n'affectent pas vos charges de travail.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a
namespace: istio-egress
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: default
workloadSelector:
app: sleep
to:
- name: aliyun-com-http # HTTP route
hosts:
- aliyun.com
port:
name: http
number: 80
protocol: HTTP
- name: aliyun-https # HTTPS route
hosts:
- aliyun.com
port:
name: https
number: 443
protocol: HTTPS
- name: https-upgrade # HTTP upgraded to HTTPS at the gateway
hosts:
- taobao.com
port:
name: http
protocol: HTTP
number: 80
httpsUpgrade:
enabled: true
port: 443
- name: tcp-svc1 # TCP service 1
hosts:
- 1.1.1.1
port:
name: tcp
protocol: TCP
number: 44
- name: tcp-svc2 # TCP service 2
hosts:
- test-tcp.com
port:
name: tcp
protocol: TCP
number: 444
Aucun champ byEgressGateway n'est spécifié dans les entrées to ; ASM attribue donc automatiquement des ports de transfert de passerelle pour les cinq destinations.
Référence des champs de la CRD
Spec
| **Champ** | **Type** | **Obligatoire** | **Description** |
|---|---|---|---|
| byEgressGateway | ByEgressGateway | Oui | Passerelle de sortie qui achemine le trafic vers les services externes. |
| egressRules | EgressRule[] | Oui | Règles de trafic sortant définissant les mappages source-destination. |
ByEgressGateway
| **Champ** | **Type** | **Obligatoire** | **Description** |
|---|---|---|---|
| name | string | Oui | Nom de la passerelle de sortie. Limitez le nom à 32 caractères maximum. |
| port | uint32 | Non | Port de la passerelle de sortie utilisé pour le transfert du trafic. |
EgressRule
| **Champ** | **Type** | **Obligatoire** | **Description** |
|---|---|---|---|
| name | string | Non | Nom descriptif de cette règle. |
| from | From[] | Oui | Charges de travail du maillage qui initient les requêtes sortantes. |
| to | To[] | Oui | Services externes qui reçoivent le trafic. |
From
| **Champ** | **Type** | **Obligatoire** | **Description** |
|---|---|---|---|
| namespace | string | Oui | Namespace de la charge de travail qui initie la requête. |
| workloadSelector | map[string]string | Non | Sélecteur d'étiquettes identifiant des charges de travail spécifiques au sein du namespace. |
To
| **Champ** | **Type** | **Obligatoire** | **Description** |
|---|---|---|---|
| name | string | Oui | Nom unique pour cette entrée de service externe au sein de la règle. |
| hosts | string[] | Oui | Noms de domaine ou adresses IP du service externe. Vous pouvez spécifier plusieurs domaines, mais toutes les entrées doivent se résoudre vers la même adresse. |
| port | Port | Oui | Port du service externe. Le champ protocol accepte HTTP, HTTPS ou TCP. |
| byEgressGateway | ByEgressGateway | Oui | Port de la passerelle de sortie utilisé pour transférer le trafic vers ce service. À partir d'ASM 1.24.6.45, si tous les champs byEgressGateway sont omis dans chaque entrée to de la politique, ASM attribue automatiquement un port pour chaque service. |
| httpsUpgrade | HttpsUpgrade | Non | Met à niveau les requêtes HTTP sortantes vers HTTPS au niveau de la passerelle de sortie. |
HttpsUpgrade
| **Champ** | **Type** | **Obligatoire** | **Description** |
|---|---|---|---|
| enabled | bool | Oui | Définissez sur true pour mettre à niveau les requêtes HTTP vers HTTPS au niveau de la passerelle de sortie. Si la valeur est false, la valeur port ci-dessous est ignorée. |
| port | uint32 | Oui | Port HTTPS du service externe (généralement 443). |
Notes d'utilisation
Namespace : Créez toutes les ressources
ASMEgressTrafficPolicydans le namespaceistio-egress.Nomination : Nommez chaque politique selon la passerelle de sortie associée (par exemple,
egress-by-egressgateway-apour la passerelleegressgateway-a).Domaines multiples : Lors de la saisie de plusieurs entrées dans
hosts, tous les domaines doivent se résoudre vers la même adresse IP.Allocation automatique des ports : Disponible à partir d'ASM 1.24.6.45. S'applique uniquement lorsque chaque entrée
tode la politique omet le champbyEgressGateway.Protocoles pris en charge : Le champ
protocoldansportaccepteHTTP,HTTPSouTCP. La prise en charge de TCP nécessite ASM 1.24.6.45 ou une version ultérieure.