I assume you already have an valid SSL-Certificate and the corresponding key.
The SSL connection and certificate will be handled by the ingress-controller. Therefor we do not need to include the SSL-certs into the container images but the manifest instead. That way you can change the certificate without building new images.
Create a Secret
To reference the Certificate in the manifest we need to provide the certificate and the key to kubernetes. This is done by creating a secret.
It is important to convert both files to base64. Otherwise this will not work.
cat server.crt | base64
cat server.key | base64
Next we will create the secret in our manifest.
apiVersion: v1
kind: Secret
metadata:
name: ssl-cert
namespace: server-center
type: kubernetes.io/tls
data:
tls.crt: |
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlIZHpDQ0JsK2dBd0lCQWdJVEhRQUJPbGxM
djE1dTJDaU9hQUFEQUFFNldUQU5CZ2txaGtpRzl3MEJBUXNGDQpBREJLTVFzd0NRWURWUVFHRXdK
...
tls.key: |
LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2QUlCQURBTkJna3Foa2lHOXcwQkFRRUZB
QVNDQktZd2dnU2lBZ0VBQW9JQkFRRGk1ZTZtTC8wRTE4UGsKNUdoNDRrdzBtZXRTL3gwMU1TU0lL
...
Create Ingress
Now we will create the ingress and reference the SSL-Cert for that.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: my-namespace
spec:
tls:
host:
- my-hostname
secretName: ssl-cert
rules:
- host: my-hostname
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: frontend-service
port:
number: 80
Now your Ingress will accept HTTP and HTTPS.