在与Kubernetes合作了几个月的时候,我找到了一种很好的方法,可以使用一个现有的域名,通过子域公开集群-ip,但也可以使用入口控制器通过不同的子域公开大多数的微服务。
我的入口示例代码:
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使用此配置:
这样,所有的微服务都可以使用相同的集群负载均衡器(IP)公开,但使用不同的子域。
我试图对Server进行同样的操作,但这并不有效,不确定原因,但我觉得原因是SQL Server使用TCP而不是HTTP进行通信。
- host: microname3.subdomain.domain.com
http:
paths:
- pathType: ImplementationSpecific
backend:
serviceName: mssql-linux
servicePort: 1433对于如何为TCP服务做同样的事情,有什么想法吗?
发布于 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]公开的服务。
https://stackoverflow.com/questions/68951982
复制相似问题