0

我正在尝试使用 AWS 复制我们在裸机基础设施中设置的内容。诚然,我并不精通 K8S,但我的一位同事已经开始在 AWS 中使用它,所以我一直在捎带他所做的一些工作。他能够回答我的大部分问题,但这个问题似乎让我们有点难过。

在我们的裸机设置中,大约有 20k 个具有单独 SSL 证书的唯一站点。在对几个站点和证书进行小规模测试时,它可以工作。但是,在全尺寸范围内,它不会。

我能够编写脚本将证书导入 K8S 并从中创建一个 voyager 入口配置 yaml 文件,但是当我尝试应用它时,我收到以下错误消息:

bash-5.0# kubectl apply -f generated-ingress.yaml
The Ingress "generated-ingress" is invalid: metadata.annotations: Too long: must have at most 262144 characters

看来是入口配置太大了。

生成的入口看起来像这样:

---
apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
  name: generated-ingress
  namespace: default
spec:
  tls:
    - secretName: ssl-cert-eample-domain.com
      hosts:
        - example-domain.com
    # Repeated for each domain using SSL
  rules:
    - host: '*'
      http:
        paths:
        - backend:
            serviceName: the-backend
            servicePort: '80'
    - host: example-domain.com
      http:
        paths:
        - backend:
            serviceName: the-backend
            servicePort: '80'
            headerRules:
            - X-HTTPS YES 
    # Repeated for each domain using SSL

仅供参考X-HTTPS,我们的后端需要标头才能正确使用https而不是http. 如果可以为所有 SSL 连接指定它,而不是为每个单独的域指定它,那就太好了,使配置更精简。

无论如何,有没有办法增加配置的限制?或者有没有更好的方法来配置大量 SSL 证书的入口?

4

1 回答 1

1

我相信你会因为试图在此处描述kubectl的记录中记录以前的事态而被咬伤。给你带来问题的不是它本身。{"metadata":{"annotation":{"kubectl.kubernetes.io/last-applied-configuration": "GINORMOUS string"}}} Ingress

在您的情况下,由于输入对象太大,我相信您将不得不使用kubectl replace而不是apply,因为(a)您似乎已经掌握了整个声明(b)我认为不会kubectl replace尝试捕获该注释除非明确--save-config=true规定replace


与您的问题分开,如果您还没有意识到,则无需在一个资源中声明IngressIngress一个资源——当它们不同时,管理和推理资源要容易得多、多得多、多得多、得多

所以你的配置:

apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
  name: generated-ingress
  namespace: default
spec:
  tls:
    - secretName: ssl-cert-eample-domain.com
      hosts:
        - example-domain.com
    # Repeated for each domain using SSL
  rules:
    - host: '*'
      http:
        paths:
        - backend:
            serviceName: the-backend
            servicePort: '80'
    - host: example-domain.com
      http:
        paths:
        - backend:
            serviceName: the-backend
            servicePort: '80'
            headerRules:
            - X-HTTPS YES

会成为:

apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
  name: star-domain
  namespace: default
spec:
  rules:
    - host: '*'
      http:
        paths:
        - backend:
            serviceName: the-backend
            servicePort: '80'

然后为每个域重复此结构:

apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
  name: example-domain
  namespace: default
spec:
  tls:
    - secretName: ssl-cert-example-domain.com
      hosts:
        - example-domain.com
  rules:
    - host: example-domain.com
      http:
        paths:
        - backend:
            serviceName: the-backend
            servicePort: '80'
            headerRules:
            - X-HTTPS YES

放入资源ingressmetadata: name:_Ingresskubectl describe ingress/generated-ingress

于 2019-10-23T03:09:07.963 回答