Per collegare le applicazioni a servizi che operano in ambienti diversi da Kubernetes, registrare i servizi esterni utilizzando la CLI di palmctl .
Prima di cominciare
- Distribuire il cluster Kubernetes in una sottorete che possa essere instradata verso il servizio esterno.
- Installare l'agente Open Horizon nel cluster Kubernetes.
- Installare il gateway edge Service Interconnect® per stabilire la capacità di proxy verso i servizi esterni. Vedere Registrazione delle risorse dell'infrastruttura tramite la CLI di Mesh.
Informazioni su questa attività
Gli esempi di questa procedura utilizzano yq per analizzare l'oggetto risposta dell'API. Se la vostra distribuzione Linux® non ha yq come impostazione predefinita, potete installarlo o usare un elaboratore di testo alternativo.
Procedura
- Ottenere gli ID della risorsa dell'infrastruttura da utilizzare durante il processo di registrazione del servizio esterno. Impostare il nome dell'infrastruttura che si applica al gateway distribuito.
#Existing infrastructure names
CLOUD_NAME="MyCloud"
NET_SEG_NAME="MyNetworkSegment"
CLUSTER_NAME="MyCluster"
NAMESPACE_NAME="MyNamespace"
APP_RESOURCE_GROUP_NAME="MyResourceGroup"
#Get existing infrastructure resource ids
CLOUD_ID=$(palmctl get cloud -\-name $CLOUD_NAME | yq .resource_id)
NET_SEG_ID=$(palmctl get networksegment -\-name $NET_SEG_NAME | yq .resource_id)
CLUSTER_ID=$(palmctl get deploymentenv -\-name $CLUSTER_NAME | yq .resource_id)
NAMESPACE_ID=$(palmctl get namespace -\-cloud-id $CLOUD_ID -\-cluster-id $CLUSTER_ID -\-name $NAMESPACE_NAME | yq .resource_id)
APP_RESOURCE_GROUP_ID=$(palmctl get resource-group -\-name $APP_RESOURCE_GROUP_NAME | yq .resource_id)
Nota: Creare la risorsa nel secondo cluster, il cluster proxy a cui si indirizza il servizio esterno. Il primo cluster scopre automaticamente le risorse e i servizi.
- Registrate l'applicazione e poi impostate una variabile d'ambiente sull'ID dell'applicazione eseguendo comandi come questi:
cat << EOM | palmctl create application -f -
name: Order API
description: This is a backend application that provides ordering services via a REST API
labels:
- label1:value1
- label2:value2
network_segment_id: $NET_SEG_ID
resource_group_id: $APP_RESOURCE_GROUP_ID
EOM
APP_ID=$(palmctl get application --name 'Order API' | yq .resource_id)
Note:
- Date alla vostra applicazione un nome significativo.
- È inoltre possibile definire il gruppo di risorse dell'applicazione, inserire una descrizione o aggiungere etichette.
- Registrate il servizio e poi impostate una variabile d'ambiente con l'ID del servizio eseguendo comandi come questi:
cat << EOM | palmctl create service --application-id $APP_ID -f -
name: order-api
labels:
- label1:value1
- label2:value2
ports:
- port_number: "8080"
protocol: TCP
EOM
SERVICE_ID=$(palmctl get service --application-id $APP_ID --name order-api | yq .resource_id)
Note:
- Per l'attributo name nell'input YAML del comando, utilizzare il nome accessibile via DNS che le applicazioni client del segmento di rete utilizzano per accedere al servizio.
- L'attributo name deve essere un'etichetta DNS che segue lo standard RFC 1035.
- È inoltre possibile inserire porte, protocolli ed etichette.
- Registrare l'installazione client e impostare la variabile d'ambiente per l'ID dell'installazione client.
Registrate l'installazione client eseguendo un comando come questo:
cat << EOM | palmctl create deployment --application-id $APP_ID -f -
depl_env_id: $CLUSTER_ID
partition_id: $NAMESPACE_ID
type: external
EOM
Note:
- Assicurarsi di impostare l'ambiente di distribuzione e la partizione del gateway che stabilisce la capacità di connettersi al servizio non Kubernetes.
- Assicurarsi di impostare
type su external.
Impostate la variabile d'ambiente per l'ID di distribuzione eseguendo un comando come questo:
DEPLOYMENT_ID=$(palmctl get deployment --application-id "$APP_ID" --deployment-env-name "$CLUSTER_NAME" \
--partition-name "NAMESPACE_NAME" | yq .resource_id)
- Registrate l'endpoint del servizio esterno e impostate una variabile d'ambiente con l'ID del servizio, eseguendo comandi come questi:
cat << EOM | palmctl create service-endpoint --application-id $APP_ID --deployment-id $DEPLOYMENT_ID -f -
service_id: $SERVICE_ID
hostname_targets: service.dns.name
ip_targets: 192.168.0.1,192.168.0.2
depl_env_id: $CLUSTER_ID
local_service_ip_address: 10.0.0.1
EOM
Note:
- Includere valori in almeno uno dei campi
hostname_targets e ip_targets, ma è possibile includere valori in entrambi. Il gateway di distribuzione deve essere in grado di connettersi ai nomi host o agli indirizzi IP. Separare le voci di questi campi con delle virgole. Per il campo ip_targets, utilizzare solo gli indirizzi IPv4.
- È necessario includere un valore in
local_service_ip_address, anche se non viene utilizzato. Inserire un indirizzo IP segnaposto come 10.0.0.1.
Operazioni successive
Dopo aver registrato il servizio esterno, è necessario creare un criterio di connessione per esporre il servizio alle altre applicazioni del segmento di rete. Per informazioni su come creare il criterio, vedere Connessione di applicazioni tramite criteri con Mesh CLI.
Importante: è necessario creare un criterio di connessione prima di poter utilizzare il servizio esterno.
Se il servizio esterno cambia, potrebbe essere necessario modificare anche l'endpoint del servizio. I punti seguenti descrivono quando e come potrebbe essere necessario modificare gli endpoint del servizio:
- Per aggiornare i nomi host o gli indirizzi IP per gli endpoint di servizio esterni, ottenere gli endpoint di servizio esistenti e aggiungere i nuovi dettagli di destinazione. Per informazioni su come aggiornare gli endpoint, vedere Aggiornamento degli endpoint dei servizi esterni tramite la CLI.
- Per scollegare un servizio esterno da un'applicazione, eliminare il criterio di connessione associato.
- Se un servizio esterno ha più endpoint di servizio, è possibile eliminare i singoli endpoint, se necessario. Non è necessario eliminare il criterio di connessione. Ad esempio, si possono avere più gateway che fanno da proxy al servizio esterno. In questo caso, è possibile mantenere il criterio di connessione ma eliminare l'endpoint del servizio specifico.