首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于TCP的Kubernetes主机和服务入侵映射

基于TCP的Kubernetes主机和服务入侵映射
EN

Stack Overflow用户
提问于 2021-08-27 10:36:18
回答 1查看 950关注 0票数 2

在与Kubernetes合作了几个月的时候,我找到了一种很好的方法,可以使用一个现有的域名,通过子域公开集群-ip,但也可以使用入口控制器通过不同的子域公开大多数的微服务。

我的入口示例代码:

代码语言:javascript
复制
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
  name: cluster-ingress-basic
  namespace: ingress-basic
  selfLink: >-
    /apis/networking.k8s.io/v1beta1/namespaces/ingress-basic/ingresses/cluster-ingress-basic
  uid: 5d14e959-db5f-413f-8263-858bacc62fa6
  resourceVersion: '42220492'
  generation: 29
  creationTimestamp: '2021-06-23T12:00:16Z'
  annotations:
    kubernetes.io/ingress.class: nginx
  managedFields:
    - manager: Mozilla
      operation: Update
      apiVersion: networking.k8s.io/v1beta1
      time: '2021-06-23T12:00:16Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:metadata':
          'f:annotations':
            .: {}
            'f:kubernetes.io/ingress.class': {}
        'f:spec':
          'f:rules': {}
    - manager: nginx-ingress-controller
      operation: Update
      apiVersion: networking.k8s.io/v1beta1
      time: '2021-06-23T12:00:45Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:status':
          'f:loadBalancer':
            'f:ingress': {}
spec:
  rules:
    - host: microname1.subdomain.domain.com
      http:
        paths:
          - pathType: ImplementationSpecific
            backend:
              serviceName: kylin-job-svc
              servicePort: 7070
    - host: microname2.subdomain.domain.com
      http:
        paths:
          - pathType: ImplementationSpecific
            backend:
              serviceName: superset
              servicePort: 80
    - {}
status:
  loadBalancer:
    ingress:
      - ip: xx.xx.xx.xx

使用此配置:

  1. microname1.subdomain.domain.com指向Apache Kylin
  2. microname2.subdomain.domain.com指向Apache

这样,所有的微服务都可以使用相同的集群负载均衡器(IP)公开,但使用不同的子域。

我试图对Server进行同样的操作,但这并不有效,不确定原因,但我觉得原因是SQL Server使用TCP而不是HTTP进行通信。

代码语言:javascript
复制
- host: microname3.subdomain.domain.com
  http:
    paths:
      - pathType: ImplementationSpecific
        backend:
          serviceName: mssql-linux
          servicePort: 1433

对于如何为TCP服务做同样的事情,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-27 13:27:08

您的理解是很好的,默认情况下,NGINX is只支持HTTP和HTTPs流量配置(第7层),因此您的SQL服务器可能因此无法工作。

您的SQL服务使用的是TCP连接,所以它是不考虑您试图设置的自定义域,因为它们使用相同的IP地址。

解决问题的方法不是对此服务使用自定义子域,而是设置在NGINX侵入控制器中公开TCP服务。例如,可以将此SQL服务设置为在端口1433的入口IP上可用:

入口控制器使用标志--tcp-services-configmap--udp-services-configmap指向现有的配置映射,其中键是要使用的外部端口,值指示要使用的格式:<namespace/service name>:<service port>:[PROXY]:[PROXY]公开的服务。

要设置它,您可以遵循NGINX官方文件中提供的步骤,但也有一些关于StackOverflow的更详细说明,例如这一个

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68951982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档