Kubernetes入口不起作用,默认后端404

时间:2020-08-10 14:19:51

标签: kubernetes google-kubernetes-engine nginx-ingress

我是Kubernetes的新手。我正在为K8S使用GKE托管服务。有2个部署nginx,httpd和为这2个部署创建的NodePort服务。

我正在尝试为服务创建入口规则。 Nginx入口控制器通过头盔安装。我有一个来自freenom的域,并将Google云DNS设置为使用静态公共IP。当我尝试点击入口网址(domain / nginx)时,提示:

“默认后端-404”


部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
  replicas: 1
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd
  labels:
    name: httpd
spec:
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
        - name: httpd
          image: httpd
  replicas: 1

服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: nginx
  name: nginx-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort

类似于httpd服务

入口:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    kubernetes.io/ingress.global-static-ip-name: testingk8s
spec:
  rules:
    - host: xyz.tk
      http: 
        paths:
          - path: /nginx
            backend:
              serviceName: nginx-service
              servicePort: 80
          - path: /httpd
            backend:
              serviceName: httpd-service
              servicePort: 80

入口描述:

Default backend:  default-http-backend:80 (10.48.0.7:8080)
Rules:
  Host           Path  Backends
  ----           ----  --------
  xyz.tk
                 /nginx   nginx-service:80 (10.48.0.25:80)
                 /httpd   httpd-service:80 (10.48.0.26:80)
Annotations:     ingress.kubernetes.io/backends:
                   {"k8s-be-30916--413d33a91e61ca5d":"HEALTHY","k8s-be-31376--413d33a91e61ca5d":"HEALTHY","k8s-be-32702--413d33a91e61ca5d":"HEALTHY"}

Ingress Controller Pod日志:

I0812 09:38:34.405188       6 event.go:278] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"nginx", Name:"test", UID:"61991dbd-a361-47d2-88cc-548a7c43e743", APIVersion:"networking.k8s.io/v1beta1", ResourceVersion:"316030", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress nginx/test
I0812 09:38:34.405815       6 controller.go:139] Configuration changes detected, backend reload required.
I0812 09:38:34.532163       6 controller.go:155] Backend successfully reloaded.
I0812 09:38:41.369315       6 status.go:275] updating Ingress nginx/test status from [] to [{35.192.136.218 }]
I0812 09:38:41.374080       6 event.go:278] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"nginx", Name:"test", UID:"61991dbd-a361-47d2-88cc-548a7c43e743", APIVersion:"networking.k8s.io/v1beta1", ResourceVersion:"316057", FieldPath:""}): type: 'Normal' reason: 'UPDATE' Ingress nginx/test

2 个答案:

答案 0 :(得分:2)

添加注释kubernetes.io/ingress.class: nginxnginx.ingress.kubernetes.io/rewrite-target: /。所以入口看起来像下面的

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: xyz.tk
      http: 
        paths:
          - path: /nginx
            backend:
              serviceName: nginx-service
              servicePort: 80
          - path: /httpd
            backend:
              serviceName: httpd-service
              servicePort: 80

答案 1 :(得分:0)

在安装HELM图表时,会向nginx-insgress创建一个具有随机IP的LoadBalancer,这就是不能在loadBalancer中使用预先创建的IP的原因。

尝试安装配置了controller.service.loadBalancerIP的HELM图表:

controller.service.loadBalancerIP分配给负载均衡器的IP地址(如果支持)

helm install --name nginx-ingress stable/nginx-ingress \
      --set controller.service.loadBalancerIP=<YOUR_EXTERNAL_IP>

注意:您的IP必须位于群集的同一区域。请参阅此documentation