入口主机 url 未提供响应
ingress host url not providing response
入口 IP 提供预期结果,但主机 returns 404 未找到 http
Ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: helloworld-ing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
defaultBackend:
service:
name: helloworld-svc
port:
number: 8080
ingressClassName: nginx
tls:
- hosts:
- helloworld.dev.com
secretName: ingress-tls-csi
rules:
- host: helloworld.dev.com
http:
paths:
- path: /helloworld
pathType: Prefix
backend:
service:
name: helloworld-svc
port:
number: 8080
Ingress Ip 之前无法正常工作,但添加默认后端解决了该问题。
我相信这可能是它没有通过后端甚至没有达到规则的问题。
我在入口日志中没有看到 warning/errors,但如果我删除默认后端,我什至无法使用入口 IP 访问应用程序。
我不确定我的入口配置中缺少什么。
我正在为 url 和 Ip -
尝试相同的路径
Curl http://10.110.45.61/helloworld/service/result
Curl http://helloworld.dev.com/helloworld/service/result
如果需要,我很乐意提供更多信息。
您好,希望您享受 Kubernetes 之旅!
所以这是我第一次尝试测试的内容(我现在还没有测试 tls):
首先,我使用此配置在本地设置了一个类集群(此处的信息:https://kind.sigs.k8s.io/docs/user/quick-start/):
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: so-cluster-1
nodes:
- role: control-plane
image: kindest/node:v1.23.5
- role: control-plane
image: kindest/node:v1.23.5
- role: control-plane
image: kindest/node:v1.23.5
- role: worker
image: kindest/node:v1.23.5
- role: worker
image: kindest/node:v1.23.5
- role: worker
image: kindest/node:v1.23.5
在此之后,我使用以下命令创建我的集群:
kind create cluster --config=config.yaml
接下来,我创建了一个测试命名空间(通过以下方式获得的清单:kubectl create ns so-tests -o yaml --dry-run):
apiVersion: v1
kind: Namespace
metadata:
name: so-tests
然后我创建了这个 vanilla nginx 部署并通过服务公开了它,这是配置(来自这里 https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment 的清单):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
与 pod 相同(清单来自于:k expose deployment nginx-deployment --dry-run -o yaml):
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx-deployment
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
在将每个清单应用到我的集群并检查我的 pods 是否为 运行 之后,我确保我可以通过 运行:[=25 访问我的 nginx pod 网页主页=]
kubectl port-forward pod/nginx-deployment-74d589986c-c85r9 8080:80 #checked on localhost:8080 and it was succesful
我对服务做了同样的事情,以确保它正确地将流量重定向到 pod:
k port-forward service/nginx-deployment 8080:80 #checked on localhost:8080 and it was succesful
当我确定我的工作负载正确 运行 并且可以访问时,我使用以下命令安装了 nginx 入口控制器(从这里:https://kubernetes.github.io/ingress-nginx/deploy/):
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
然后我创建了 ingress k8s 资源,这里是配置(通过 运行 获得:k create ingress demo-localhost --class=nginx --rule="demo.localdev.me/*=demo:80" 并用我的服务名称替换 service.name。):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
creationTimestamp: null
name: demo-localhost
spec:
ingressClassName: nginx
rules:
- host: demo.localdev.me
http:
paths:
- backend:
service:
name: nginx-deployment
port:
number: 80
path: /
pathType: Prefix
然后检查我的入口是否正确地重定向了流量 运行:
kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80 #I also tested this on my browser localhost:8080
你猜怎么着? -> 404 未找到。
所以,我决定将名称“demo.localdev.me”替换为“localhost”并且它起作用了,这是 conf:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-localhost
spec:
ingressClassName: nginx
rules:
- host: localhost #demo.localdev.me
http:
paths:
- backend:
service:
name: nginx-deployment
port:
number: 80
path: /
pathType: Prefix
我在 windows 上访问了我的 C:\Windows\System32\drivers\etc\hosts 文件(相当于 linux 上的 /etc/hosts,或者相当于企业中的 DNS 服务器)来检查是否这是一个 dns 问题,我添加了这一行:
127.0.0.1 demo.localdev.me
并且它按预期工作。 (确保在播放 /etc/hosts 文件或使用私人导航以获得准确结果时清除浏览器缓存)
因此,您可以进行一些测试:确保:
- 你的路径是正确可达的(你可以用
kubectl port-forward,正如我之前所做的那样)
- 您确实在 dns 中有正确的条目将流量重定向到您的 nginx 服务(而不是您的应用程序 pod 服务)
- 您没有阻止端口的防火墙
- tls 配置工作正常(尝试使用和不使用)
如果您有更多信息要与我们分享,请随时,我们很乐意为您提供帮助!
祝你有个愉快的一天!
入口 IP 提供预期结果,但主机 returns 404 未找到 http
Ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: helloworld-ing
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
defaultBackend:
service:
name: helloworld-svc
port:
number: 8080
ingressClassName: nginx
tls:
- hosts:
- helloworld.dev.com
secretName: ingress-tls-csi
rules:
- host: helloworld.dev.com
http:
paths:
- path: /helloworld
pathType: Prefix
backend:
service:
name: helloworld-svc
port:
number: 8080
Ingress Ip 之前无法正常工作,但添加默认后端解决了该问题。 我相信这可能是它没有通过后端甚至没有达到规则的问题。
我在入口日志中没有看到 warning/errors,但如果我删除默认后端,我什至无法使用入口 IP 访问应用程序。
我不确定我的入口配置中缺少什么。
我正在为 url 和 Ip -
尝试相同的路径Curl http://10.110.45.61/helloworld/service/result
Curl http://helloworld.dev.com/helloworld/service/result
如果需要,我很乐意提供更多信息。
您好,希望您享受 Kubernetes 之旅!
所以这是我第一次尝试测试的内容(我现在还没有测试 tls): 首先,我使用此配置在本地设置了一个类集群(此处的信息:https://kind.sigs.k8s.io/docs/user/quick-start/):
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: so-cluster-1
nodes:
- role: control-plane
image: kindest/node:v1.23.5
- role: control-plane
image: kindest/node:v1.23.5
- role: control-plane
image: kindest/node:v1.23.5
- role: worker
image: kindest/node:v1.23.5
- role: worker
image: kindest/node:v1.23.5
- role: worker
image: kindest/node:v1.23.5
在此之后,我使用以下命令创建我的集群:
kind create cluster --config=config.yaml
接下来,我创建了一个测试命名空间(通过以下方式获得的清单:kubectl create ns so-tests -o yaml --dry-run):
apiVersion: v1
kind: Namespace
metadata:
name: so-tests
然后我创建了这个 vanilla nginx 部署并通过服务公开了它,这是配置(来自这里 https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment 的清单):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
与 pod 相同(清单来自于:k expose deployment nginx-deployment --dry-run -o yaml):
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx-deployment
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
在将每个清单应用到我的集群并检查我的 pods 是否为 运行 之后,我确保我可以通过 运行:[=25 访问我的 nginx pod 网页主页=]
kubectl port-forward pod/nginx-deployment-74d589986c-c85r9 8080:80 #checked on localhost:8080 and it was succesful
我对服务做了同样的事情,以确保它正确地将流量重定向到 pod:
k port-forward service/nginx-deployment 8080:80 #checked on localhost:8080 and it was succesful
当我确定我的工作负载正确 运行 并且可以访问时,我使用以下命令安装了 nginx 入口控制器(从这里:https://kubernetes.github.io/ingress-nginx/deploy/):
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
然后我创建了 ingress k8s 资源,这里是配置(通过 运行 获得:k create ingress demo-localhost --class=nginx --rule="demo.localdev.me/*=demo:80" 并用我的服务名称替换 service.name。):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
creationTimestamp: null
name: demo-localhost
spec:
ingressClassName: nginx
rules:
- host: demo.localdev.me
http:
paths:
- backend:
service:
name: nginx-deployment
port:
number: 80
path: /
pathType: Prefix
然后检查我的入口是否正确地重定向了流量 运行:
kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80 #I also tested this on my browser localhost:8080
你猜怎么着? -> 404 未找到。
所以,我决定将名称“demo.localdev.me”替换为“localhost”并且它起作用了,这是 conf:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-localhost
spec:
ingressClassName: nginx
rules:
- host: localhost #demo.localdev.me
http:
paths:
- backend:
service:
name: nginx-deployment
port:
number: 80
path: /
pathType: Prefix
我在 windows 上访问了我的 C:\Windows\System32\drivers\etc\hosts 文件(相当于 linux 上的 /etc/hosts,或者相当于企业中的 DNS 服务器)来检查是否这是一个 dns 问题,我添加了这一行:
127.0.0.1 demo.localdev.me
并且它按预期工作。 (确保在播放 /etc/hosts 文件或使用私人导航以获得准确结果时清除浏览器缓存)
因此,您可以进行一些测试:确保:
- 你的路径是正确可达的(你可以用 kubectl port-forward,正如我之前所做的那样)
- 您确实在 dns 中有正确的条目将流量重定向到您的 nginx 服务(而不是您的应用程序 pod 服务)
- 您没有阻止端口的防火墙
- tls 配置工作正常(尝试使用和不使用)
如果您有更多信息要与我们分享,请随时,我们很乐意为您提供帮助!
祝你有个愉快的一天!