我是 kubernetes 新手,实际上我 1 周前就开始使用,我尝试使用 Ingress 来查看使用域名的应用程序,但无论我做了什么,我都无法让它工作。我的 yaml 文件具有以下格式,当我应用它时,它运行正常并且不会显示任何错误。
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
namespace: my-namespace
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-app-service
namespace: my-namespace
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
nodePort: 32000
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
namespace: my-namespace
spec:
ingressClassName: nginx
rules:
- host: xxxx.xxxxxx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
当我尝试使用nodePort http://??.??.??.??:32000/ 浏览应用程序时,我可以查看应用程序的内容,但是当我使用域名时,我收到错误消息“无法访问该网站”。
我花了太多时间,却找不到问题所在。有人可以告诉我我的配置有什么问题吗?
提前致谢
您需要更改
Ingress
yaml 文件中的服务名称以匹配您创建的实际服务的名称。
spec:
ingressClassName: nginx
rules:
- host: xxxx.xxxxxx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service # EDIT THIS FROM nginx-service
port:
number: 80
根据您发布的 YAML 配置,Ingress 资源中指定的服务名称与您之前在配置中定义的服务的实际名称似乎不匹配。在我看来,这可能就是您的域名无法正确解析到 Kubernetes 上托管的应用程序的原因。
您的服务使用名称
my-app-service
进行定义,但是,在您的 Ingress 定义中,您引用了名为 nginx-service
的服务。
要解决此问题,请更新 Ingress 资源以匹配正确的服务名称:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
namespace: my-namespace
spec:
ingressClassName: nginx
rules:
- host: xxxx.xxxxxx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service # Here
port:
number: 80
确保使用
kubectl apply -f <filename>.yaml
应用更新的配置。另外,请确保您的 xxxx.xxxxxx.com
的 DNS 设置正确指向运行 Ingress 控制器的 Kubernetes 集群的外部 IP。