首页 > 解决方案 > 将 SSL 证书添加到入口控制器与将其添加到入口资源

问题描述

入口控制器部署.yml

    spec:
  containers:
    - args:
        - /nginx-ingress-controller
        - --default-backend-service=stratus/nginx-ingress-default-backend
        - --election-id=ingress-controller-leader
        - --ingress-class=nginx
        - --configmap=ingress-controller-leader-nginx
        - --enable-ssl-passthrough

入口资源.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: 'REPOSITORY_NAME'
  namespace: service
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-passthrough: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  tls:
    - hosts:
        - "xyz-development.com"
    - secretName: ingress-secret-tls
  rules:
    - host: "xyz-development.com" 
      http:
        paths:
        - path: /service/
          backend:
            serviceName: 'REPOSITORY_NAME'
            servicePort: 8080

秘密包含一个签名证书,CN 为 xyz-development.com

端点:xyz-development.com/service/swagger-ui.html

如果我尝试使用上述配置访问端点,我最终会出现“您的连接不是私有的”错误。

但是如果我将入口控制器 deployment.yml 修改为

    spec:
  containers:
    - args:
        - /nginx-ingress-controller
        - --default-backend-service=stratus/nginx-ingress-default-backend
        - --election-id=ingress-controller-leader
        - --ingress-class=nginx
        - --configmap=stratus/ingress-controller-leader-nginx
        - --enable-ssl-passthrough
        - --default-ssl-certificate=service/ingress-secret-tls

然后该站点使用我的有效证书是安全的。

  1. 这是预期的行为吗?
  2. 即使在控制器中删除了默认的ssl证书标志,不应该使用入口resource.yml中提到的秘密吗?
  3. 任何其他指针或更好的做法将不胜感激

标签: sslkuberneteskubernetes-ingressnginx-ingress

解决方案


您的清单中有一个小错字导致第一个选项失败;它.spec.tls应该是条目数组中的新元素:

- secretName: ingress-secret-tls # wrong
  secretName: ingress-secret-tls # correct

推荐阅读