Kubernetes 为什么我的Kubernates群集上的入口不';是否使用nginx入口控制器在指定主机上响应?
我是库伯内特斯的头号人物。我已经使用kubeadm在Raspberry pi4b上成功配置了Kube。我使用演示图像创建了我的第一个部署,它公开了一个包含一些信息的简单页面,如果我记录pod,它会说它正确地侦听端口8080 在安装了nginx入口控制器(status is running)和helm之后,我创建了一个指向部署和入口的服务,正如教程所解释的,但是我在入口中指定的主机是不可访问的。每个吊舱的状态都在运行,但我不知道如何修复它 我不知道问题是入口控制器、入口还是其他什么 这是我的yaml:Kubernetes 为什么我的Kubernates群集上的入口不';是否使用nginx入口控制器在指定主机上响应?,kubernetes,kubernetes-ingress,kubernetes-service,Kubernetes,Kubernetes Ingress,Kubernetes Service,我是库伯内特斯的头号人物。我已经使用kubeadm在Raspberry pi4b上成功配置了Kube。我使用演示图像创建了我的第一个部署,它公开了一个包含一些信息的简单页面,如果我记录pod,它会说它正确地侦听端口8080 在安装了nginx入口控制器(status is running)和helm之后,我创建了一个指向部署和入口的服务,正如教程所解释的,但是我在入口中指定的主机是不可访问的。每个吊舱的状态都在运行,但我不知道如何修复它 我不知道问题是入口控制器、入口还是其他什么 这是我的yam
---
apiVersion: v1
kind: Namespace
metadata:
name: hello
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello-world
name: hello-world-deploy
namespace: hello
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: hello-world
spec:
containers:
# - image: docker:stable-dind
- image: pmorjan/demo:latest
name: hello-world
securityContext:
privileged: true
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
labels:
app: hello-world
name: hello-world-service
annotations:
metallb.universe.tf/allow-shared-ip: home-network
namespace: hello
spec:
ports:
- name: http
port: 80
targetPort: 8080
selector:
app: hello-world
sessionAffinity: None
type: LoadBalancer
loadBalancerIP: 192.168.1.241
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello-world-ingress
namespace: hello
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ciao.mirco.com
http:
paths:
- path: /hello
backend:
serviceName: hello-world-service
servicePort: 80
感谢您的帮助当您想通过入口访问您的pod时,您不需要为您的pod创建负载平衡器类型的服务。而是为入口控制器本身创建LoadBalancer类型的服务,并为pod创建cluserIP类型的服务。此外,要通过ciao.mirco.com访问它,您需要在正在访问的系统的/etc/hosts文件中添加一个条目,如下所示
ipaddress ciao.micro.com
如果您为入口控制器创建了Nodeport类型的服务,则iPAddress
应为nodeip;如果您创建了LoadBalancer类型的服务,则应为LoadBalancer IP
在部署nginx ingress controller的命名空间中为nginx ingress controller创建节点端口服务
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
创建此服务后,您可以检查分配给此服务的节点端口(范围为30000-32767)
查找部署nginx入口控制器吊舱的kubernetes节点的IP
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
然后,您可以通过浏览器中的
nodeport:nodeip/hello
或ciao.micro.com/hello
或通过curl nodeip:nodeport/hello-H'Host:ciao.mirco.com'
访问它。您已经配置了DNS记录吗?听8080的播客打印的服务水平,看起来很有效。192.168.1.241是我在服务中配置的ip,但它不是节点ip。这是个问题吗?kubectl port forward svc/hello world service 80:80。并打开@HarshManvar yes,如果我转发该服务,它将正常工作!现在我们知道问题是入口,我想用它来代替服务。有什么想法吗?在ingress中使用任何主机名。在/etc/host中添加指向主机的记录。您能给我一个基于yaml的示例吗?谢谢,如果您只是将IP 192.168.1.241放入浏览器中,您的工作如何?kubectl Descripte svc hello world service-n hello的输出是什么。添加有问题的输出我认为根本不需要metallb。入口控制器的简单节点端口和pod的clusterip应该可以工作。但是我不熟悉raspberry pitry this curl-D-192.168.1.100:30506/hello-H'Host:ciao.mirco.com'