nginx入口控制器don';无法到达后端服务?

nginx入口控制器don';无法到达后端服务?,nginx,kubernetes,Nginx,Kubernetes,我目前正试图通过入口控制器公开kubernetes服务,但我似乎不能这样做? 主机/路径从未解析到我要使用的clusterIp和端口,哪怕这本应通过我的入口控制器和ressource解决,但有什么奇怪的原因 apiVersion: v1 kind: Service metadata: name: hello-kubernetes spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector:

我目前正试图通过入口控制器公开kubernetes服务,但我似乎不能这样做? 主机/路径从未解析到我要使用的clusterIp和端口,哪怕这本应通过我的入口控制器和ressource解决,但有什么奇怪的原因

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.5
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-ingress-controller-conf
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: default
spec:
  replicas: 1
  revisionHistoryLimit: 3
  template:
    metadata:
      labels:
        app: nginx-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      serviceAccount: nginx
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.9.0
          imagePullPolicy: Always
          readinessProbe:
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
          livenessProbe:
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            timeoutSeconds: 5
          args:
            - /nginx-ingress-controller
            - --default-backend-service=$(POD_NAMESPACE)/default-backend-service
            - --configmap=$(POD_NAMESPACE)/nginx-ingress-controller-conf
            - --v=2
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
          - name: http 
            containerPort: 80
          - name: https
            containerPort: 443
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      name: http
    - port: 443
      targetPort: 443
      name: https 
  selector:
    app: nginx-ingress
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: nginx-role
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  - endpoints
  - nodes
  - pods
  - secrets
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - get
  - list
  - update
  - watch
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
- apiGroups:
  - extensions
  resources:
  - ingresses/status
  verbs:
  - update
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: nginx-role
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: nginx-role
subjects:
- kind: ServiceAccount
  name: nginx
  namespace: default
---
#Ingress ressource
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-hello
spec:
  rules:
  - host: dev.hello.com
    http:
      paths: 
      - backend:
          serviceName: hello-kubernetes
          servicePort: 80
---
##Default backend
apiVersion: v1
kind: Service
metadata:
  name: default-backend-service
  labels:
    app: default-backend
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: default-backend
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: default-backend
  labels:
    app: default-http-backend
spec:
  selector:
    matchLabels:
      app: default-backend  
  serviceName: default-backend-service
  replicas: 2
  template:
    metadata:
      labels:
        app: default-backend
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: default-backend
        image: gcr.io/google_containers/defaultbackend:1.0
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
        ports:
        - containerPort: 8080
        resources:
          limits:
            cpu: 10m
            memory: 20Mi
          requests:
            cpu: 10m
            memory: 20Mi
---
我试图制作一个MVP,但由于某种原因,我无法解析路径
dev.hello.com
我想用它来告诉入口我想连接到哪个服务。。。但出于某种原因,这永远不会解析为ip地址-它似乎不会命中任何东西


为什么??这是否设置不正确?

hello kubernetes的服务不应为
负载平衡器类型,因为您希望入口充当负载平衡器。因此,将hello kubernetes的服务更改为键入
ClusterIP

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes

很难理解你到底想要什么。你应该更准确地知道你到底想要什么

1.使用集群进入

正如Arghya Sadhu所写,当您使用
Ingress
时,您不需要指定

2.使用
NodePort进入

请记住,您也可以将
节点端口
入口
一起使用。可以找到很好的解释和例子

3.入口YAML 根据官方规定,最小入口资源如下所示:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80
在您的入口中,我找不到
spec.rules.http.paths.path

4.负载平衡器的IP

同样重要的是你的集群在哪里。如果您使用的是Prem上的
,如GKE、AWS、AZURE等。您的
负载平衡器将自动获得
externalIP
,允许您从外部连接到集群。但是,如果您使用的是本地计算机,则需要使用

另外,请看一下kubernetes的文档

另外,请检查,这可能会对您有所帮助