mirror of https://github.com/istio/istio.io.git
Egress Gateway mTLS origination advanced example (#2268)
* initial version * add the steps to Generate client and server certificates and keys section * extend the description of the example explain about the NGINX service * add creating namespace, secrets and nginx configuration * add creating of nginx-configmap * add deployment of NGINX * finalize the NGINX config * move creating client certificates into the section of redeploying Egress gateway * add instructions for generating and deploying istio-egressgateway.yaml * update the description * nginx.example.com -> my-nginx.mesh-external.svc.cluster.local * change the title and description to mutual TLS to extrnal services * add mTLS origination and cleanup * change the port of nginx to 443 * update the output and the log with actual content * add test NGINX deployment section * add missing dot in page description * Nginx -> NGINX * change dots to semicolons before command blocks * add volumes to the sleep deployment * add sending requests to the NGINX server * renamed the directory: mtls-egress-gateway -> egress-gateway-mtls-origination * remove redundant whitespaces * fix dead link (missing leading slash) * change the name of the port 443 to be https and protocol HTTPS * add endpoints section to the service entry * replace internal kubernetes address with nginx.example.com * change we to you * expand the introduction to explain using NGINX and nginx.example.com * remove before you begin section * use sleep container in the default namespace to test both NGINX and egress gateway * add port 80 to the ServiceEntry * remove the second definition of the ServiceEntry * use resolve option in testing mTLS * change container name from egressgateway to istio-proxy * simplify the introduction * make Egress Gateway lower case * make the introduction present tense * replace pushd/popd with cd, since they are not POSIX * add missing article * remove cross referencing with regard to generating certificates/keys * add "namely" to mesh-external namespace * the NGINX -> the NGINX server * sleep container -> sleep pod * rephrase the text about --resolve option of curl * rephrase the sentence about prompts When prompted, select `y` for all the questions. -> Select `y` for all prompts that appear. * move egress-gateway-mtls-origination into advaanced gateway examples * fixed links to the advanced gateways examples
This commit is contained in:
parent
7769ef5d6d
commit
74c98d51ab
|
|
@ -0,0 +1,561 @@
|
|||
---
|
||||
title: Mutual TLS origination by Egress Gateway
|
||||
description: Describes how to configure an Egress Gateway to perform mutual TLS origination to external services.
|
||||
weight: 45
|
||||
keywords: [traffic-management,egress]
|
||||
---
|
||||
|
||||
The [Configure an egress gateway](/docs/examples/advanced-gateways/egress-gateway) example describes how to configure
|
||||
Istio to direct the egress traffic through a dedicated service called _egress gateway_.
|
||||
This example shows how to configure an egress gateway to enable mutual TLS for traffic to external services.
|
||||
|
||||
To simulate a host outside the Istio service mesh, namely `nginx.example.com`, you deploy an
|
||||
[NGINX](https://www.nginx.com/) server in your Kubernetes cluster without injecting an Istio sidecar proxy into the
|
||||
server's pod.
|
||||
Then you configure an egress gateway to perform mutual TLS with the created NGINX server.
|
||||
Finally, you direct the traffic from the application pods inside the mesh to the created server outside the mesh through
|
||||
the egress gateway.
|
||||
|
||||
## Generate client and server certificates and keys
|
||||
|
||||
1. Clone the <https://github.com/nicholasjackson/mtls-go-example> repository:
|
||||
|
||||
{{< text bash >}}
|
||||
$ git clone https://github.com/nicholasjackson/mtls-go-example
|
||||
{{< /text >}}
|
||||
|
||||
1. Change directory to the cloned repository:
|
||||
|
||||
{{< text bash >}}
|
||||
$ cd mtls-go-example
|
||||
{{< /text >}}
|
||||
|
||||
1. Generate the certificates for `nginx.example.com`.
|
||||
Use any password with the following command:
|
||||
|
||||
{{< text bash >}}
|
||||
$ ./generate.sh nginx.example.com <password>
|
||||
{{< /text >}}
|
||||
|
||||
Select `y` for all prompts that appear.
|
||||
|
||||
1. Move the certificates into the `nginx.example.com` directory:
|
||||
|
||||
{{< text bash >}}
|
||||
$ mkdir ../nginx.example.com && mv 1_root 2_intermediate 3_application 4_client ../nginx.example.com
|
||||
{{< /text >}}
|
||||
|
||||
1. Change directory back:
|
||||
|
||||
{{< text bash >}}
|
||||
$ cd ..
|
||||
{{< /text >}}
|
||||
|
||||
## Deploy an NGINX server
|
||||
|
||||
1. Create a namespace to represent services outside the Istio mesh, namely `mesh-external`. Note that the sidecar proxy will
|
||||
not be automatically injected into the pods in this namespace since the automatic sidecar injection was not
|
||||
[enabled](/docs/setup/kubernetes/sidecar-injection/#deploying-an-app) on it.
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl create namespace mesh-external
|
||||
{{< /text >}}
|
||||
|
||||
1. Create Kubernetes [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/) to hold the server's and CA
|
||||
certificates.
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl create -n mesh-external secret tls nginx-server-certs --key nginx.example.com/3_application/private/nginx.example.com.key.pem --cert nginx.example.com/3_application/certs/nginx.example.com.cert.pem
|
||||
$ kubectl create -n mesh-external secret generic nginx-ca-certs --from-file=nginx.example.com/2_intermediate/certs/ca-chain.cert.pem
|
||||
{{< /text >}}
|
||||
|
||||
1. Create a configuration file for the NGINX server:
|
||||
|
||||
{{< text bash >}}
|
||||
$ cat <<EOF > ./nginx.conf
|
||||
events {
|
||||
}
|
||||
|
||||
http {
|
||||
log_format main '$remote_addr - $remote_user [$time_local] $status '
|
||||
'"$request" $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
access_log /var/log/nginx/access.log main;
|
||||
error_log /var/log/nginx/error.log;
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
server_name nginx.example.com;
|
||||
ssl_certificate /etc/nginx-server-certs/tls.crt;
|
||||
ssl_certificate_key /etc/nginx-server-certs/tls.key;
|
||||
ssl_client_certificate /etc/nginx-ca-certs/ca-chain.cert.pem;
|
||||
ssl_verify_client on;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
1. Create a Kubernetes [ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/)
|
||||
to hold the configuration of the NGINX server:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl create configmap nginx-configmap -n mesh-external --from-file=nginx.conf=./nginx.conf
|
||||
{{< /text >}}
|
||||
|
||||
1. Deploy the NGINX server:
|
||||
|
||||
{{< text bash >}}
|
||||
$ cat <<EOF | kubectl apply -f -
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: my-nginx
|
||||
namespace: mesh-external
|
||||
labels:
|
||||
run: my-nginx
|
||||
spec:
|
||||
ports:
|
||||
- port: 443
|
||||
protocol: TCP
|
||||
selector:
|
||||
run: my-nginx
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: my-nginx
|
||||
namespace: mesh-external
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
run: my-nginx
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
run: my-nginx
|
||||
spec:
|
||||
containers:
|
||||
- name: my-nginx
|
||||
image: nginx
|
||||
ports:
|
||||
- containerPort: 443
|
||||
volumeMounts:
|
||||
- name: nginx-config
|
||||
mountPath: /etc/nginx
|
||||
readOnly: true
|
||||
- name: nginx-server-certs
|
||||
mountPath: /etc/nginx-server-certs
|
||||
readOnly: true
|
||||
- name: nginx-ca-certs
|
||||
mountPath: /etc/nginx-ca-certs
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: nginx-config
|
||||
configMap:
|
||||
name: nginx-configmap
|
||||
- name: nginx-server-certs
|
||||
secret:
|
||||
secretName: nginx-server-certs
|
||||
- name: nginx-ca-certs
|
||||
secret:
|
||||
secretName: nginx-ca-certs
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
1. Define a `ServiceEntry` and a `VirtualService` for `nginx.example.com` to instruct Istio to direct traffic destined
|
||||
to `nginx.example.com` to your NGINX server:
|
||||
|
||||
{{< text bash >}}
|
||||
$ cat <<EOF | kubectl apply -f -
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: ServiceEntry
|
||||
metadata:
|
||||
name: nginx
|
||||
spec:
|
||||
hosts:
|
||||
- nginx.example.com
|
||||
ports:
|
||||
- number: 80
|
||||
name: http
|
||||
protocol: HTTP
|
||||
- number: 443
|
||||
name: https
|
||||
protocol: HTTPS
|
||||
resolution: DNS
|
||||
endpoints:
|
||||
- address: my-nginx.mesh-external.svc.cluster.local
|
||||
ports:
|
||||
https: 443
|
||||
---
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
name: nginx
|
||||
spec:
|
||||
hosts:
|
||||
- nginx.example.com
|
||||
tls:
|
||||
- match:
|
||||
- port: 443
|
||||
sni_hosts:
|
||||
- nginx.example.com
|
||||
route:
|
||||
- destination:
|
||||
host: nginx.example.com
|
||||
port:
|
||||
number: 443
|
||||
weight: 100
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
## Deploy a container to test the NGINX deployment
|
||||
|
||||
1. Create Kubernetes [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/) to hold the client's and CA
|
||||
certificates:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl create secret tls nginx-client-certs --key nginx.example.com/4_client/private/nginx.example.com.key.pem --cert nginx.example.com/4_client/certs/nginx.example.com.cert.pem
|
||||
$ kubectl create secret generic nginx-ca-certs --from-file=nginx.example.com/2_intermediate/certs/ca-chain.cert.pem
|
||||
{{< /text >}}
|
||||
|
||||
1. Deploy the [sleep]({{< github_tree >}}/samples/sleep) sample with mounted client and CA certificates to test sending
|
||||
requests to the NGINX server:
|
||||
|
||||
{{< text bash >}}
|
||||
$ cat <<EOF | kubectl apply -f -
|
||||
# Copyright 2017 Istio Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
##################################################################################################
|
||||
# Sleep service
|
||||
##################################################################################################
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: sleep
|
||||
labels:
|
||||
app: sleep
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
name: http
|
||||
selector:
|
||||
app: sleep
|
||||
---
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: sleep
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: sleep
|
||||
spec:
|
||||
containers:
|
||||
- name: sleep
|
||||
image: tutum/curl
|
||||
command: ["/bin/sleep","infinity"]
|
||||
imagePullPolicy: IfNotPresent
|
||||
volumeMounts:
|
||||
- name: nginx-client-certs
|
||||
mountPath: /etc/nginx-client-certs
|
||||
readOnly: true
|
||||
- name: nginx-ca-certs
|
||||
mountPath: /etc/nginx-ca-certs
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: nginx-client-certs
|
||||
secret:
|
||||
secretName: nginx-client-certs
|
||||
- name: nginx-ca-certs
|
||||
secret:
|
||||
secretName: nginx-ca-certs
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
1. Define an environment variable to hold the name of the `sleep` pod:
|
||||
|
||||
{{< text bash >}}
|
||||
$ export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
|
||||
{{< /text >}}
|
||||
|
||||
1. Use the deployed [sleep]({{< github_tree >}}/samples/sleep) pod to send requests to the NGINX server.
|
||||
Since the `nginx.example.com` host does not exist, the DNS cannot resolve the hostname. The following command uses the
|
||||
`--resolve` option of `curl` to resolve the hostname manually. You can provide any IP to the `--resolve` option,
|
||||
except for `127.0.0.1`. If you use, for example, `1.1.1.1`, Istio routes the request correctly to your NGINX server.
|
||||
Normally, a DNS entry exists for the destination hostname and you must not use the `--resolve` option of `curl`.
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl exec -it $SOURCE_POD -c sleep -- curl -v --resolve nginx.example.com:443:1.1.1.1 --cacert /etc/nginx-ca-certs/ca-chain.cert.pem --cert /etc/nginx-client-certs/tls.crt --key /etc/nginx-client-certs/tls.key https://nginx.example.com
|
||||
...
|
||||
Server certificate:
|
||||
subject: C=US; ST=Denial; L=Springfield; O=Dis; CN=nginx.example.com
|
||||
start date: 2018-08-16 04:31:20 GMT
|
||||
expire date: 2019-08-26 04:31:20 GMT
|
||||
common name: nginx.example.com (matched)
|
||||
issuer: C=US; ST=Denial; O=Dis; CN=nginx.example.com
|
||||
SSL certificate verify ok.
|
||||
> GET / HTTP/1.1
|
||||
> User-Agent: curl/7.35.0
|
||||
> Host: nginx.example.com
|
||||
...
|
||||
< HTTP/1.1 200 OK
|
||||
|
||||
< Server: nginx/1.15.2
|
||||
...
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Welcome to nginx!</title>
|
||||
...
|
||||
{{< /text >}}
|
||||
|
||||
1. Verify that the server requires the client's certificate:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl exec -it $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl -k --resolve nginx.example.com:443:1.1.1.1 https://nginx.example.com
|
||||
<html>
|
||||
<head><title>400 No required SSL certificate was sent</title></head>
|
||||
<body bgcolor="white">
|
||||
<center><h1>400 Bad Request</h1></center>
|
||||
<center>No required SSL certificate was sent</center>
|
||||
<hr><center>nginx/1.15.2</center>
|
||||
</body>
|
||||
</html>
|
||||
{{< /text >}}
|
||||
|
||||
## Redeploy the Egress Gateway with the client certificates
|
||||
|
||||
1. Create Kubernetes [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/) to hold the client's and CA
|
||||
certificates.
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl create -n istio-system secret tls nginx-client-certs --key nginx.example.com/4_client/private/nginx.example.com.key.pem --cert nginx.example.com/4_client/certs/nginx.example.com.cert.pem
|
||||
$ kubectl create -n istio-system secret generic nginx-ca-certs --from-file=nginx.example.com/2_intermediate/certs/ca-chain.cert.pem
|
||||
{{< /text >}}
|
||||
|
||||
1. Generate the `istio-egressgateway` deployment with a volume to be mounted from the new secrets. Use the same options
|
||||
you used for generating your `istio.yaml`:
|
||||
|
||||
{{< text bash >}}
|
||||
$ helm template install/kubernetes/helm/istio/ --name istio-egressgateway --namespace istio-system -x charts/gateways/templates/deployment.yaml --set gateways.istio-ingressgateway.enabled=false \
|
||||
--set gateways.istio-egressgateway.secretVolumes[0].name=egressgateway-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[0].secretName=istio-egressgateway-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[0].mountPath=/etc/istio/egressgateway-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[1].name=egressgateway-ca-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[1].secretName=istio-egressgateway-ca-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[1].mountPath=/etc/istio/egressgateway-ca-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[2].name=nginx-client-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[2].secretName=nginx-client-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[2].mountPath=/etc/nginx-client-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[3].name=nginx-ca-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[3].secretName=nginx-ca-certs \
|
||||
--set gateways.istio-egressgateway.secretVolumes[3].mountPath=/etc/nginx-ca-certs > \
|
||||
./istio-egressgateway.yaml
|
||||
{{< /text >}}
|
||||
|
||||
1. Redeploy `istio-egressgateway`:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl apply -f ./istio-egressgateway.yaml
|
||||
deployment "istio-egressgateway" configured
|
||||
{{< /text >}}
|
||||
|
||||
1. Verify that the key and the certificate are successfully loaded in the `istio-egressgateway` pod:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=egressgateway -o jsonpath='{.items[0].metadata.name}') -- ls -al /etc/nginx-client-certs /etc/nginx-ca-certs
|
||||
{{< /text >}}
|
||||
|
||||
`tls.crt` and `tls.key` should exist in `/etc/istio/nginx-client-certs`, while `ca-chain.cert.pem` in
|
||||
`/etc/istio/nginx-ca-certs`.
|
||||
|
||||
## Mutual TLS origination for egress traffic
|
||||
|
||||
1. Create an egress `Gateway` for `nginx.example.com`, port 443, and destination rules and
|
||||
virtual services to direct the traffic through the egress gateway and from the egress gateway to the external
|
||||
service.
|
||||
|
||||
{{< text bash >}}
|
||||
$ cat <<EOF | kubectl apply -f -
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: Gateway
|
||||
metadata:
|
||||
name: istio-egressgateway
|
||||
spec:
|
||||
selector:
|
||||
istio: egressgateway
|
||||
servers:
|
||||
- port:
|
||||
number: 443
|
||||
name: https
|
||||
protocol: HTTPS
|
||||
hosts:
|
||||
- nginx.example.com
|
||||
tls:
|
||||
mode: MUTUAL
|
||||
serverCertificate: /etc/certs/cert-chain.pem
|
||||
privateKey: /etc/certs/key.pem
|
||||
caCertificates: /etc/certs/root-cert.pem
|
||||
---
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: DestinationRule
|
||||
metadata:
|
||||
name: egressgateway-for-nginx
|
||||
spec:
|
||||
host: istio-egressgateway.istio-system.svc.cluster.local
|
||||
subsets:
|
||||
- name: nginx
|
||||
trafficPolicy:
|
||||
loadBalancer:
|
||||
simple: ROUND_ROBIN
|
||||
portLevelSettings:
|
||||
- port:
|
||||
number: 443
|
||||
tls:
|
||||
mode: ISTIO_MUTUAL
|
||||
sni: nginx.example.com
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
1. Define a `VirtualService` to direct the traffic through the egress gateway, and a `DestinationRule` to perform
|
||||
mutual TLS origination:
|
||||
|
||||
{{< text bash >}}
|
||||
$ cat <<EOF | kubectl apply -f -
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
name: direct-nginx-through-egress-gateway
|
||||
spec:
|
||||
hosts:
|
||||
- nginx.example.com
|
||||
gateways:
|
||||
- istio-egressgateway
|
||||
- mesh
|
||||
http:
|
||||
- match:
|
||||
- gateways:
|
||||
- mesh
|
||||
port: 80
|
||||
route:
|
||||
- destination:
|
||||
host: istio-egressgateway.istio-system.svc.cluster.local
|
||||
subset: nginx
|
||||
port:
|
||||
number: 443
|
||||
weight: 100
|
||||
- match:
|
||||
- gateways:
|
||||
- istio-egressgateway
|
||||
port: 443
|
||||
route:
|
||||
- destination:
|
||||
host: nginx.example.com
|
||||
port:
|
||||
number: 443
|
||||
weight: 100
|
||||
---
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: DestinationRule
|
||||
metadata:
|
||||
name: originate-mtls-for-nginx
|
||||
spec:
|
||||
host: nginx.example.com
|
||||
trafficPolicy:
|
||||
loadBalancer:
|
||||
simple: ROUND_ROBIN
|
||||
portLevelSettings:
|
||||
- port:
|
||||
number: 443
|
||||
tls:
|
||||
mode: MUTUAL
|
||||
clientCertificate: /etc/nginx-client-certs/tls.crt
|
||||
privateKey: /etc/nginx-client-certs/tls.key
|
||||
caCertificates: /etc/nginx-ca-certs/ca-chain.cert.pem
|
||||
sni: nginx.example.com
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
1. Send an HTTP request to `http://nginx.example.com`:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl exec -it $SOURCE_POD -c sleep -- curl -s --resolve nginx.example.com:80:1.1.1.1 http://nginx.example.com
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Welcome to nginx!</title>
|
||||
...
|
||||
{{< /text >}}
|
||||
|
||||
1. Check the log of the `istio-egressgateway` pod and see a line corresponding to our request. If Istio is deployed in
|
||||
the `istio-system` namespace, the command to print the log is:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl logs $(kubectl get pod -l istio=egressgateway -n istio-system -o jsonpath='{.items[0].metadata.name}') -n istio-system | grep 'nginx.example.com' | grep HTTP
|
||||
{{< /text >}}
|
||||
|
||||
You should see a line related to your request, similar to the following:
|
||||
|
||||
{{< text plain>}}
|
||||
[2018-08-19T18:20:40.096Z] "GET / HTTP/1.1" 200 - 0 612 7 5 "172.30.146.114" "curl/7.35.0" "b942b587-fac2-9756-8ec6-303561356204" "nginx.example.com" "172.21.72.197:443"
|
||||
{{< /text >}}
|
||||
|
||||
## Cleanup
|
||||
|
||||
1. Perform the instructions in the [Cleanup](/docs/examples/advanced-gateways/egress-gateway/#cleanup)
|
||||
section of the [Configure an Egress Gateway](/docs/examples/advanced-gateways/egress-gateway) example.
|
||||
|
||||
1. Remove created Kubernetes resources:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl delete secret nginx-server-certs nginx-ca-certs -n mesh-external
|
||||
$ kubectl delete secret nginx-client-certs nginx-ca-certs
|
||||
$ kubectl delete secret nginx-client-certs nginx-ca-certs -n istio-system
|
||||
$ kubectl delete configmap nginx-configmap -n mesh-external
|
||||
$ kubectl delete service my-nginx -n mesh-external
|
||||
$ kubectl delete deployment my-nginx -n mesh-external
|
||||
$ kubectl delete namespace mesh-external
|
||||
$ kubectl delete gateway istio-egressgateway
|
||||
$ kubectl delete serviceentry nginx
|
||||
$ kubectl delete virtualservice direct-nginx-through-egress-gateway
|
||||
$ kubectl delete destinationrule originate-mtls-for-nginx
|
||||
$ kubectl delete destinationrule egressgateway-for-nginx
|
||||
{{< /text >}}
|
||||
|
||||
1. Delete the directory of the certificates and the repository used to generate them:
|
||||
|
||||
{{< text bash >}}
|
||||
$ rm -rf nginx.example.com mtls-go-example
|
||||
{{< /text >}}
|
||||
|
||||
1. Delete the generated configuration files used in this example:
|
||||
|
||||
{{< text bash >}}
|
||||
$ rm -f ./nginx.conf ./istio-egressgateway.yaml
|
||||
{{< /text >}}
|
||||
|
||||
1. Delete the `sleep` service and deployment:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl delete service sleep
|
||||
$ kubectl delete deployment sleep
|
||||
{{< /text >}}
|
||||
Loading…
Reference in New Issue