Kubernetes 为什么我的Kubernates群集上的入口不';是否使用nginx入口控制器在指定主机上响应?

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

我是库伯内特斯的头号人物。我已经使用kubeadm在Raspberry pi4b上成功配置了Kube。我使用演示图像创建了我的第一个部署,它公开了一个包含一些信息的简单页面,如果我记录pod,它会说它正确地侦听端口8080

在安装了nginx入口控制器(status is running)和helm之后,我创建了一个指向部署和入口的服务,正如教程所解释的,但是我在入口中指定的主机是不可访问的。每个吊舱的状态都在运行,但我不知道如何修复它

我不知道问题是入口控制器、入口还是其他什么

这是我的yaml:

---
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'