Home / Keptn v1 Docs / Release 0.15.x / Continuous Delivery / Expose deployed services
To be able to access the services you will deploy by Keptn, Istio has to be installed. This means that the istio-ingressgateway
service should already be available in the istio-system
namespace and a public-gateway
need to be created as explained below. Besides, a ConfigMap must be edited that tells Keptn how the gateway is configured.
Please follow the steps in sequential order:
Gateway
, please follow the official Istio documentation on Configuring Ingress using an Istio Gateway. Use the below gateway.yaml
manifest to create a Istio gateway with the name public-gateway
in the istio-system
namespace:---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: public-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
name: http
number: 80
protocol: HTTP
hosts:
- '*'
kubectl apply -f gateway-manifest.yaml
Determine the ingress IP and ports:
kubectl -n istio-system get svc istio-ingressgateway
Create the ingress-config
ConfigMap in the keptn
namespace:
INGRESS_HOSTNAME_SUFFIX=<IP_OF_YOUR_INGRESS>.nip.io
INGRESS_PORT=<PORT_OF_YOUR_INGRESS>
INGRESS_PROTOCOL=<PROTOCOL> # "http" or "https"
ISTIO_GATEWAY=<GATEWAY_NAME>.<NAMESPACE_OF_GATEWAY> # e.g. public-gateway.istio-system
HOSTNAME_TEMPLATE=<HOSTNAME_TEMPLATE> # optional, default = \${INGRESS_PROTOCOL}://\${service}.\${project}-\${stage}.\${INGRESS_HOSTNAME_SUFFIX}:\${INGRESS_PORT}
**Note:** In the above example, `nip.io` is used as wildcard DNS for the IP address.
**Note:** The `HOSTNAME_TEMPLATE` describes how the hostname for the automatically generated `VirtualService` should look like. This value will also be used for the `deploymentURIPublic` property contained in the `deployment.finished` events sent by the helm-service will look like. This URL can then be used by execution plane services that need to access the deployed service (e.g. a testing service like the jmeter-service).
Within the `HOSTNAME_TEMPLATE`, you can use the variables `INGRESS_HOSTNAME_SUFFIX`, `INGRESS_PORT`, `INGRESS_PROTOCOL`, as well as `project`, `stage` and `service`. Please escape those variables using `\${}` when defining the value for `HOSTNAME_TEMPLATE`, since the resulting string should contain the placeholders of those variables instead of their actual values.
kubectl create configmap -n keptn ingress-config --from-literal=ingress_hostname_suffix=${INGRESS_HOSTNAME_SUFFIX} --from-literal=ingress_port=${INGRESS_PORT} --from-literal=ingress_protocol=${INGRESS_PROTOCOL} --from-literal=istio_gateway=${ISTIO_GATEWAY} --from-literal=hostname_template=${HOSTNAME_TEMPLATE} -oyaml --dry-run | kubectl replace -f -
If you have already set up a domain that points to your Istio ingress, you can use it for the INGRESS_HOSTNAME_SUFFIX
. In this case, use the following command to create the ingress-config
ConfigMap in the keptn
namespace:
INGRESS_HOSTNAME_SUFFIX=<YOUR_HOSTNAME>
INGRESS_PORT=<PORT_OF_YOUR_INGRESS>
INGRESS_PROTOCOL=<PROTOCOL> # "http" or "https"
ISTIO_GATEWAY=<GATEWAY_NAME>.<NAMESPACE_OF_GATEWAY> # e.g. public-gateway.istio-system
HOSTNAME_TEMPLATE=<HOSTNAME_TEMPLATE> # optional, default = \${INGRESS_PROTOCOL}://\${service}.\${project}-\${stage}.\${INGRESS_HOSTNAME_SUFFIX}:\${INGRESS_PORT}
kubectl create configmap -n keptn ingress-config --from-literal=ingress_hostname_suffix=${INGRESS_HOSTNAME_SUFFIX} --from-literal=ingress_port=${INGRESS_PORT} --from-literal=ingress_protocol=${INGRESS_PROTOCOL} --from-literal=istio_gateway=${ISTIO_GATEWAY} --from-literal=hostname_template=${HOSTNAME_TEMPLATE} -oyaml --dry-run | kubectl replace -f -
After creating the ConfigMap, restart the helm-service
:
kubectl delete pod -n keptn --selector=app.kubernetes.io/name=helm-service