【问题标题】:Traefik Kubernetes: Expose non Kubernetes serviceTraefik Ku​​bernetes:暴露非 Kubernetes 服务
【发布时间】:2018-09-16 17:33:08
【问题描述】:

我正在使用带有 Traefik 的 Kubernetes 作为入口控制器。我的网络中有一些 Web 服务还不能被容器化。因此,我正在寻找一种通过 Traefik Ingress 公开我的非 Kubernetes Web 服务的方法。我没有更多的公共 IP,因此不能拆分两个环境。

我已经创建了一个端点 + 服务来解决这个问题,但是当我尝试连接时,我得到一个 SSL 协议错误。我做错了什么还是有人有其他解决方案?

这些是我的(测试)端点和服务 yaml:

kind: Endpoints
apiVersion: v1
metadata:
  name: my-service
subsets:
  - addresses:
      - ip: 10.4.0.6
    ports:
      - port: 443
---
kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  ports:
  - protocol: TCP
    port: 443
    name: https
    targetPort: 443
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: host.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: my-service
          servicePort: 443

【问题讨论】:

  • 您看到了什么错误?如果您的后端不在端口 443(不是 TLS)上,它是否有效。您是否设置了证书?
  • @Rico 我所有的后端服务都重定向到端口 443。为了测试这个场景,我必须部署一个端口 80 测试服务。 Chrome 会抛出 ERR_SSL_PROTOCOL_ERROR,但这是一个非常普遍的错误。

标签: kubernetes traefik


【解决方案1】:

对于初学者,我敢打赌,当您kubectl describe svc my-service 时,您有空端点,即使端点确实存在,对吧?

要解决这个问题,您需要调整端点 ports 键,使其具有与您的服务相同的端口定义(名称、协议等)。然后您应该会在describe service 结果中看到这些端点并且能够正常使用它。

【讨论】:

  • 端口相同,但我没有指定相同的端口名称。当我描述我的服务时,现在会显示端点。仍然无法访问主机名,但我会解决更多问题。
【解决方案2】:

您可以尝试以下方法:创建一个 ExternalName 类型的 K8s 服务,该服务绑定到您的外部 Web 服务,并像使用“本机”K8s 服务一样添加一个 Ingress。

外部名称服务 --> https://kubernetes.io/docs/concepts/services-networking/service/#externalname

经验

apiVersion: v1
kind: Service 
metadata:
  name: my-service
  namespace: prod
spec:
  type: ExternalName
  externalName: my.database.example.com

【讨论】:

    【解决方案3】:

    关于这个问题,我们有多个问题。 首先,我用 helm 部署了 Traefik。我发现默认情况下禁用 SSL...

    我的 values.yaml 如下:

    imageTag: 1.6.6
    rbac:
      enabled: true
    dashboard:
      enabled: true
      domain: traefik.dahsboard.local
    ssl:
      enabled: true
      insecureSkipVerify: true
      upstream: true
    

    就像 Radek 提到的,端点和服务的端口定义必须相同。

    我的是:

    kind: Service
    apiVersion: v1
    metadata:
      name: my-service
    spec:
      ports:
      - protocol: TCP
        port: 443
        targetPort: 443
        name: https
    ---
    kind: Endpoints
    apiVersion: v1
    metadata:
      name: my-service
    subsets:
      - addresses:
        - ip: 10.4.0.6
        ports:
        - protocol: TCP
          port: 443
          name: https
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2020-12-17
      • 2016-03-25
      • 2021-08-13
      • 2018-11-21
      • 2018-10-31
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多