kubernetes 通过两个单独入口(http + https)将K8S流量发送到一个服务

b1payxdu  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(1)|浏览(121)

因此,我在集群中运行了一系列服务,所有服务都通过HTTP唯一入口对象公开,例如:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: some-ingress
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - backend:
          service:
            name: some-svc
            port:
              number: 80
        path: /some-svc(/|$)(.*)
        pathType: Prefix

它们是通过http://<CLUSTER_EXTERNAL_IP>/some-svc访问的,它的工作原理是ofc。
现在,我想为每个服务创建一个额外的入口对象,它将强制SSL连接,并允许使用域而不是IP地址。
问题是,在测试连接时,较新的SSL入口总是返回404
清单如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "some-ingress-ssl"
  annotations:
    ingress.kubernetes.io/ssl-redirect: "true"
    ingress.kubernetes.io/app-root: "/some-svc"
spec:
  tls:
  - hosts:
      - foobar.com
    secretName: foobar-tls
  rules:
  - host: foobar.com
    http:
      paths:
      - path: /some-svc(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: some-svc
            port:
              number: 80

测试(foobar.com指向集群外部IP):

> curl -I http://<CLUSTER_EXTERNAL_IP>/some-svc
HTTP/1.1 200 OK
> curl -I https://foobar.com/some-svc
HTTP/2 404

有没有可能同时有两个入口?(一个强制SSL,另一个不强制)如果有,我在这里做错了什么?

l7wslrjt

l7wslrjt1#

想通了我还遗漏了这样的注解:

nginx.ingress.kubernetes.io/rewrite-target: /$2

SSL入口中...
现在就像一个魅力,也许有人会发现这个有用

相关问题