繁体   English   中英

GKE、NGINX 入口、HTTPS 和证书

[英]GKE, NGINX ingress, HTTPS, and certificates

我已经在 GCP/GKE 上建立了一个 Kubernetes 集群,除了一件事之外,它都运行良好。 当我访问该服务的外部 IP 时,(默认?)“Kubernetes Ingress Controller Fake Certificate”被提供。

我正在尝试使用 NGINX 入口( https://kubernetes.github.io/ingress-nginx/相信正确的指示是 TLS 秘密。 例如:

https://estl.tech/configuring-https-to-a-web-service-on-google-kubernetes-engine-2d71849520d

https://kubernetes.github.io/ingress-nginx/user-guide/tls/

我创造了一个这样的秘密:

apiVersion: v1
kind: Secret
metadata:
  name: example-tls
  namespace: default
data:
  tls.crt: [removed]
  tls.key: [removed]
type: kubernetes.io/tls

并将该秘密(我可以确认已正确应用,并且可以在集群配置中看到)与 Ingress 相关联,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/ingress.allow-http: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/affinity: "cookie"
spec:
  backend:
    serviceName: example-service
    servicePort: 80
  tls:
  - secretName: example-tls

从文档中我觉得这应该可行(但是,除非出现错误,否则我显然弄错了。)。

我还看到一些关于要求 HTTPS 的目标代理的文档。 也许这就是我应该这样做的方式?

非常感谢您提前提供的帮助。

干杯,本

PS:这是我的负载均衡器配置:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Cluster
  loadBalancerIP: [removed]
  sessionAffinity: ClientIP
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https

编辑 1:查看我的 Ingress,我可以看到:

➜  gke git:(develop) ✗ kubectl describe ing example-tls-ingress
Name:             example-tls-ingress
Namespace:        default
Address:          [removed]
Default backend:  example-webapp-service:80 ([removed])
TLS:
  example-tls terminates 
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     *     example-webapp-service:80 ([removed])

所以看起来这个秘密被捡到了。

这让我觉得 Ingress-terminated TLS 和 Load Balancer-terminated TLS 之间有区别吗?

你可以参考这个stackoverflow帖子。

您需要安装 jetstack cert-Manager,创建 clusterissuer/issuer,以及您必须在其中传递域名/主机名的证书,jetstack 将自动为您创建秘密,使用您在“证书”中提到的名称。

该秘密必须在入口规则中修补到 TLS。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM