如何为GKE Ingress设置TLS连接

时间:2019-03-24 19:41:46

标签: https kubernetes kubernetes-ingress

我想在Google Cloud中为我的应用程序启用https连接。我遵循了一些教程,但似乎无济于事。

我已经使用Ingress在GKE上部署了应用程序。这是ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: myapp-ip
spec:
  backend:
    serviceName: myapp-service
    servicePort: 80

使用ip地址访问它可以正常工作,可以从Internet访问该站点。

我已经购买了带有Google域的域,并通过添加指向我的外部IP地址和CNAME记录的A记录来配置DNS区域。现在可以通过该域完美访问应用程序。

enter image description here

然后我通过运行命令创建SSL证书和Kubernate秘密:

openssl genrsa -out myapp-ingress-1.key 2048
openssl req -new -key myapp-ingress-1.key -out myapp-ingress-1.csr -subj "/CN=myapp.co.uk"
openssl x509 -req -days 365 -in myapp-ingress-1.csr -signkey myapp-ingress-1.key -out myapp-ingress-1.crt
kubectl create secret tls myapp-tls-secret-1 --cert myapp-ingress-1.crt --key myapp-ingress-1.key

并更新了ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: myapp-ip
spec:
  tls:
  - secretName: myapp-tls-secret-1
  rules:
  - host: myapp.co.uk
    http:
      paths:
      - backend:
          serviceName: myapp-service
          servicePort: 80

我在互联网上按照不同的示例尝试了多个ingress.yml文件,但没有一个起作用。

有人可以建议我吗?

1 个答案:

答案 0 :(得分:1)

您在yaml文件中缺少指定要保护的主机的行。由于您没有使用external-dns,因此必须在域提供者端手动创建记录,以将IP地址连接到您的域(您似乎已经这样做)。看起来您的入口密码和tls密码都在default名称空间中,因此您可以使用以下ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.global-static-ip-name: myapp-ip
spec:
  tls:
  - hosts:
    - "myapp.co.uk"
    secretName: myapp-tls-secret-1
  rules:
  - host: "myapp.co.uk"
    http:
      paths:
      - path: /
        backend:
          serviceName: myapp-service
          servicePort: 80