Traefik Ku​​bernetes:公开非Kubernetes服务

时间:2018-09-16 17:33:09

标签: kubernetes traefik

我正在将Kubernetes与Traefik用作Ingress Controller。我的网络中有一些尚不能容器化的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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

关于此问题,我们有多个问题。 首先,我带着头盔部署了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

答案 2 :(得分:0)

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

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

Exp。

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