当前位置: 首页 > 知识库问答 >
问题:

如何创建HTTPS路由到正在使用Traefik和库伯内特斯监听Https的服务

萧升
2023-03-14

我是kubernetes和Traefik的新手。

我跟进教程:https://docs.traefik.io/user-guides/crd-acme/

我将其更改为在Scala中使用我的服务,即使用https和9463端口。我正在尝试使用kubernetes和traefik部署Scala服务。

当我直接转发到服务时:

kubectl port-forward service/core-service 8001:9463

我执行一个curl-k'https://localhost:8001/health':

我得到了“{消息:Ok}”

但当我向traefik执行端口转发时

kubectl port-forward service/traefik 9463:9463 -n default

并执行卷曲-khttps://ejemplo.com:9463/tls/health'我收到一个“内部服务器错误”

我想问题是我的“核心服务”正在通过HTTPS协议监听,这就是我添加的方案:https。我试图通过留档找到解决方案,但令人困惑。

这些是我的yml文件:

服务。亚马尔

apiVersion: v1  
kind: Service  
metadata:  
  name: traefik

spec:  
  ports:
    - protocol: TCP
      name: admin
      port: 8080
    - protocol: TCP
      name: websecure
      port: 9463
  selector:
    app: traefik

---
apiVersion: v1  
kind: Service  
metadata:  
  name: core-service

spec:  
  ports:
    - protocol: TCP
      name: websecure
      port: 9463
  selector:
    app: core-service

部署。亚马尔

apiVersion: v1  
kind: ServiceAccount  
metadata:  
  namespace: default
  name: traefik-ingress-controller

---
kind: Deployment  
apiVersion: apps/v1  
metadata:  
  namespace: default
  name: traefik
  labels:
    app: traefik

spec:  
  replicas: 1
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      labels:
        app: traefik
    spec:
      serviceAccountName: traefik-ingress-controller
      containers:
        - name: traefik
          image: traefik:v2.0
          args:
            - --api.insecure
            - --accesslog
            - --entrypoints.websecure.Address=:9463
            - --providers.kubernetescrd
            - --certificatesresolvers.default.acme.tlschallenge
            - --certificatesresolvers.default.acme.email=foo@you.com
            - --certificatesresolvers.default.acme.storage=acme.json
            # Please note that this is the staging Let's Encrypt server.
            # Once you get things working, you should remove that whole line altogether.
            - --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
          ports:
            - name: websecure
              containerPort: 9463
            - name: admin
              containerPort: 8080

---
kind: Deployment  
apiVersion: apps/v1  
metadata:  
  namespace: default
  name: core-service
  labels:
    app: core-service

spec:  
  replicas: 1
  selector:
    matchLabels:
      app: core-service
  template:
    metadata:
      labels:
        app: core-service
    spec:
      containers:
        - name: core-service
          image: core-service:0.1.4-SNAPSHOT
          ports:
            - name: websecure
              containerPort: 9463
          livenessProbe:
            httpGet:
              port: 9463
              scheme: HTTPS
              path: /health
            initialDelaySeconds: 10

IngressRoute2.yaml

apiVersion: traefik.containo.us/v1alpha1  
kind: IngressRoute  
metadata:  
  name: ingressroutetls
  namespace: default
spec:  
  entryPoints:
    - websecure
  routes:
  - match: Host(`ejemplo.com`) && PathPrefix(`/tls`)
    kind: Rule
    services:
    - name: core-service
      port: 9463
      scheme: https
  tls:
    certResolver: default

共有1个答案

焦同
2023-03-14

从文档中

默认情况下,TLS路由器将终止TLS连接。但是,可以指定直通选项来设置请求是否应“按原样”转发,同时保持所有数据加密。

在您的情况下,需要启用SSL直通,因为pod需要HTTPS流量。

apiVersion: traefik.containo.us/v1alpha1  
kind: IngressRoute  
metadata:  
  name: ingressroutetls
  namespace: default
spec:  
  entryPoints:
    - websecure
  routes:
  - match: Host(`ejemplo.com`) && PathPrefix(`/tls`)
    kind: Rule
    services:
    - name: core-service
      port: 9463
      scheme: https
  tls:
    certResolver: default
    passthrough: true
 类似资料:
  • 我是Kubernetes平台的新手,尝试启用部署在Kubernetes平台上的tomcat web app的HTTPS安全连接。我对舱单感到困惑。与部署、服务和入口控制器相关的yml。 那么,我是否也必须在部署(在端口:-containerPort:8080)服务(如端口:-端口:80 targetPort:8080协议:TCP名称:http)和入口(在后端:serviceName:tomcat

  • 我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url

  • 我正在研究如何在Nginx入口之间实现https安全连接- 以下是我的场景: 来自internet的客户端- 所以我的问题是,如何保护入口控制器和pod之间的通信,以便对通信进行端到端加密?我是否需要自己的证书颁发机构才能做到这一点?如果有,是否有任何开源解决方案可以像Cert manager一样处理证书管理?

  • 是否可以在库伯内特斯中配置入口控制器,仅当传入请求的标头具有特定值时才将HTTP请求路由到服务? 实例 带有以下标头的HTTP请求 应该转发给服务1 带有以下标头的HTTP请求 应该被阻止 如果可能的话,你能详细一点或指向一些文档,因为我找不到这种用例的文档吗

  • 我想了解在我想在GCP上使用一个HTTPS负载平衡器来服务bucket中的一些静态内容和Kubernetes上使用react前端和express后端组合的动态内容的场景中,我的负载平衡选项是什么。 附加信息: 我有一个在谷歌域名之外注册的域名 我想通过https提供所有内容 我不是从什么大事做起的。刚刚开始一个或多或少的业余爱好类型的项目,在不久的将来,它将吸引很少的流量 我不介意从app eng

  • 我正在分布式模式下使用 cp-kafka-connect Helm chart 在 Google Kubernetes Engine (GKE) 上部署 Kafka-connect。 一个工作的Kafka集群与代理和动物园管理员已经在同一个GKE集群上运行。我知道我可以通过发送帖子请求到endpoint来创建连接器,一旦它可用。但是,Kafka连接容器进入运行状态,然后开始加载jar文件,直到所有