Go 如何在kubernetes吊舱中获取主机名
我有3个入口指向同一个服务。在我的kubernetes吊舱中,我如何找到主机名以及来自哪个子域的请求。我在golang服务器中的后端代码。Go 如何在kubernetes吊舱中获取主机名,go,kubernetes,kubernetes-ingress,gorilla,Go,Kubernetes,Kubernetes Ingress,Gorilla,我有3个入口指向同一个服务。在我的kubernetes吊舱中,我如何找到主机名以及来自哪个子域的请求。我在golang服务器中的后端代码。 当请求到达任何pod时,我想知道请求来自哪个子域(x,y,x)到达pod。目前在golang代码中,它将主机名作为pod ip地址 kind: Ingress metadata: annotations: ingress.kubernetes.io/browser-xss-filter: 'true' ingress.kubernetes
当请求到达任何pod时,我想知道请求来自哪个子域(x,y,x)到达pod。目前在golang代码中,它将主机名作为pod ip地址
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/browser-xss-filter: 'true'
ingress.kubernetes.io/force-hsts: 'true'
ingress.kubernetes.io/hsts-include-subdomains: 'true'
ingress.kubernetes.io/hsts-max-age: '315360000'
name: test
namespace: test
spec:
rules:
- host: http://x.test.com
http:
paths:
- backend:
serviceName: test-service
servicePort: 8080
path: /
- host: http://y.test.com
http:
paths:
- backend:
serviceName: test-service
servicePort: 8080
path: /
- host: http://z.test.com
http:
paths:
- backend:
serviceName: test-service
servicePort: 8080
path: /
尝试使用ingress controller添加的
X-Forwarded-Host
标头我们不使用nginx,我们使用本机golang Server您的ingress controller是nginx否?ingress controller是Traefikt他们使用相同的标头。如果你能在你的问题中提供traefik版本,试试看。
func Subdomain( r *http.Request) {
host := r.URL.Host
host = strings.TrimSpace(host)
//Figure out if a subdomain exists in the host given.
host_parts := strings.Split(host, ".")
if len(host_parts) > 2 {
//The subdomain exists, we store it as the first element
//in a new array
subdomain := []string{host_parts[0]}
}
}