Я хочу использовать HTTPS для своего Kubernetes в Azure (AKS). Для этого я использую nginx-ingress (https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md#azure). Все ресурсы, которые я создал в этом руководстве, используют пространство имен ingress-nginx. Вот почему я продолжаю использовать это пространство имен вместо пространства по умолчанию. Мой Ingress работает нормально. Теперь я хочу использовать HTTPS вместо HTTP.
Для этого я создал CSR:
openssl req -new -newkey rsa:2048 -nodes -keyout private.key -out example.csr -subj "/CN=domain.com"
Я отправляю CSR поставщику подписи (QuoVadis), который отправляет мне обратно следующие файлы:
- domain_com (цепочка) .crt
- domain_com.crt
- QuoVadis_Global_SSL_ICA_G2.crt
- QuoVadis_Root_CA_2.crt
Я немного сбит с толку, потому что во всех уроках я обнаружил, что упоминается только один crt. Цепочка выглядит как комбинация всех трех других файлов. Вот почему я продолжил цепочку:
sudo kubectl create secret tls ssl-secret-test --cert domain_com(chain).crt --key private.key -n ingress-nginx
Я добавил секрет в свой вход:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
namespace: ingress-nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- domain.com
secretName: ssl-secret-test
rules:
- host: domain.com
- http:
paths:
- path: /app1(/|$)(.*)
backend:
serviceName: app1-service
servicePort: 80
- path: /app2(/|$)(.*)
backend:
serviceName: app2-service
servicePort: 80
Мои развертывания app1 и app2 больше не доступны для домена. Если я использую IP-адрес, он все еще работает:
domain.com/app1:
404 Not Found - openresty / 1.15.8.1
52.xxx.xxx.xx / app1:
Привет, мир
В обоих случаях я все равно получаю предупреждение о незащищенном соединении. Вот обзор моих услуг:
$ sudo kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 57d
ingress-nginx app1-service NodePort 10.0.229.109 <none> 80:31343/TCP 22h
ingress-nginx app2-service NodePort 10.0.175.201 <none> 80:31166/TCP 22h
ingress-nginx ingress-nginx LoadBalancer 10.0.40.172 52.xxx.xxx.xx 80:32564/TCP,443:32124/TCP 22h
kube-system healthmodel-replicaset-service ClusterIP 10.0.233.181 <none> 25227/TCP 5d10h
kube-system heapster ClusterIP 10.0.214.146 <none> 80/TCP 57d
kube-system kube-dns ClusterIP 10.0.0.10 <none> 53/UDP,53/TCP 57d
kube-system kubernetes-dashboard ClusterIP 10.0.160.230 <none> 80/TCP 57d
kube-system metrics-server ClusterIP 10.0.170.103 <none> 443/TCP 57d
$ sudo kubectl get ingress --all-namespaces
NAMESPACE NAME HOSTS ADDRESS PORTS AGE
ingress-nginx nginx-ingress domain.com 52.xxx.xxx.xx 80, 443 37m
$ sudo kubectl get deployments --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
ingress-nginx app1 2 2 2 2 22h
ingress-nginx app2 2 2 2 2 22h
ingress-nginx nginx-ingress-controller 1 1 1 1 57d
kube-system coredns 2 2 2 2 58d
kube-system coredns-autoscaler 1 1 1 1 58d
kube-system heapster 1 1 1 1 5d10h
kube-system kubernetes-dashboard 1 1 1 1 58d
kube-system metrics-server 1 1 1 1 58d
kube-system omsagent-rs 1 1 1 1 58d
kube-system tunnelfront 1 1 1 1 58d
Что я делаю не так?
Обновление с помощью cert-manager
Я выполнил следующий урок:
https://docs.cert-manager.io/en/latest/getting-started/install/kubernetes.html
и подтвердил все на примере test-resources.yaml.
Теперь я выполнил шаги по настройке CA ISSUER.
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: domain-com
namespace: default
spec:
secretName: domain-com-tls
issuerRef:
name: ca-issuer
kind: ClusterIssuer
commonName: domain.com
organization:
- QuoVadis
dnsNames:
- domain.com
- www.domain.com
-----
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: ca-issuer
namespace: default
spec:
ca:
secretName: ssl-secret-test
Но вроде не работает:
$ kubectl describe certificate domain-com
...
Status:
Conditions:
Last Transition Time: 2019-09-12T07:48:19Z
Message: Certificate does not exist
Reason: NotFound
Status: False
Type: Ready
Not After: 2021-09-11T07:46:00Z
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning IssuerNotReady 8s (x9 over 4h51m) cert-manager Issuer ca-issuer not ready
А на странице устранения неполадок я обнаружил дополнительную неопределенность:
$ kubectl --namespace cert-manager get secret cert-manager-webhook-webhook-tls
Error from server (NotFound): secrets "cert-manager-webhook-webhook-tls" not found