【问题标题】:How to get Kubernetes Ingress to terminate SSL and proxy to service?如何让 Kubernetes Ingress 终止 SSL 和代理服务?
【发布时间】:2018-03-28 23:24:02
【问题描述】:

我有一个在裸机上使用 kubernetes 的 centos7 部署。一切都很好。但是,我想让Ingress 工作。所以简而言之,我想做的是从 Ingress 中终止 SSL,并在 ingress 和我的服务之间使用普通的 http。这就是我所做的:

1) 我hack weave to allow hostNetwork

2) 我设置了一个入口控制器:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
  labels:
    k8s-app: nginx-ingress-lb
    kubernetes.io/cluster-service: "true"
spec:
  template:
    metadata:
      labels:
        k8s-app: nginx-ingress-lb
        name: nginx-ingress-lb
    spec:
      hostNetwork: true
      terminationGracePeriodSeconds: 60
      serviceAccountName: nginx-ingress-serviceaccount
      nodeSelector:
        role: edge-router
      containers:
      - image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0
        name: nginx-ingress-lb
        imagePullPolicy: Always
        readinessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
          initialDelaySeconds: 10
          timeoutSeconds: 1
        # use downward API
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
        ports:
          - containerPort: 80
            hostPort: 80
          - containerPort: 443
            hostPort: 443
        args:
          - /nginx-ingress-controller
          - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
          - --enable-ssl-passthrough
          # - --default-ssl-certificate=$(POD_NAMESPACE)/tls-certificate
        volumeMounts:
          - name: tls-dhparam-vol
            mountPath: /etc/nginx-ssl/dhparam
      volumes:
        - name: tls-dhparam-vol
          secret:
            secretName: tls-dhparam

注意 DaemonSet 和 nodeSelector。还有hostNetwork = true,这样我的 kubernetes 节点将打开 80 和 443 来监听路由)。

所以我尝试去http://foo.bar.com,不出所料,什么也没有。我刚得到default backend - 404 页面。我需要入口规则....

3) 所以我创建了一个像这样的Ingress 规则:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hub
  annotations:
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.org/ssl-services: "hub"
spec:
  tls:
  - hosts:
    - foo.bar.com
    secretName: tls-dhparam
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        backend:
          serviceName: hub
          servicePort: 8000

所以它工作得很好!...对于http...当我在http://foo.bar.com 访问我的节点时,我可以访问我的服务(集线器)并可以登录。但是,由于必须登录,因此只有强制执行 https 才有意义......

所以我的问题是,当我将浏览器切换到 https://foo.bar.com 时,我最终会看到 default backend - 404 页面。

查看上面提供的证书,我发现它是由 kubernetes 创建的:

Kubernetes Ingress Controller Fake Certificate
Self-signed root certificate

检查我的秘密:

$ kubectl -n ingress-nginx get secrets
NAME                                       TYPE                                  DATA      AGE
default-token-kkd2j                        kubernetes.io/service-account-token   3         12m
nginx-ingress-serviceaccount-token-7f2sq   kubernetes.io/service-account-token   3         12m
tls-dhparam                                Opaque                                1         8m

我做错了什么?

【问题讨论】:

    标签: https kubernetes kubernetes-ingress


    【解决方案1】:

    问题是我使用 pem 文件似乎不起作用(并且没有与之相关的明显错误)。通过

    切换到 tls 证书/密钥
    kubectl create secret tls tls-certificate --key my.key --cert my.cer
    

    工作。

    【讨论】:

      【解决方案2】:

      在您的示例中,您的 Ingress 似乎没有明确声明 metadata.namespace。如果它最终在 default 命名空间中,而 tls-dhparam Secret 在 ingress-nginx 命名空间中,那将是问题所在。 Ingresses 的 tls 机密应与 Ingress 位于同一命名空间中。

      【讨论】:

        猜你喜欢
        • 2021-02-03
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2018-08-13
        • 2021-11-28
        • 2020-05-07
        • 2017-04-06
        • 2017-11-09
        相关资源
        最近更新 更多