我的入口控制器为什么不将流量从外部IP路由到群集中的服务?

时间:2019-11-29 05:54:59

标签: kubernetes kubernetes-ingress

我在Digital Ocean上有一个集群。 1个主节点和2个节点。 我正在将Nginx控制器与Digital Ocean Load Balancer一起使用。 我的Ingress服务中的三个项目运行正常。我使用Nginx的第四个不使用。 有人知道为什么吗?

这里是配置。我忽略了正在运行的第1到第3部署的Ingress服务。我可以根据需要添加它们。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: hw1.example.com
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-first
          servicePort: 80
  - host: hw2.example.com
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-second
          servicePort: 80
  - host: hw3.example.com
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-third
          servicePort: 80
  - host: hw4.example.com
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-fourth
          servicePort: 80

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes-fourth
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes-fourth
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-fourth
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-fourth
  template:
    metadata:
      labels:
        app: hello-kubernetes-fourth
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 8080

2 个答案:

答案 0 :(得分:1)

首先,如果您使用nginx映像,则容器Port应该是该映像的Dockerfile公开的端口。 对于nginx映像,ContainerPort应该为端口80 https://hub.docker.com/layers/nginx/library/nginx/stable/images/sha256-cab8e4374e1e32bac58a8c7ae96c252cadcb1049545ed4bb3e3bfd5d087983b9

现在您应该通过从minikube节点访问podip:containerPort来测试nginx是否可用:

kubectl get po -o wide
hello-kubernetes-fourth-cb4fb668c-7tkd4   1/1     Running   0      25m  172.17.0.12                               

curl 172.17.0.12

此后,您应该修改服务的端口:targetPort应该与containerPort(80)和8080端口匹配 现在通过服务URL访问Nginx:

kubectl describe svc hello-kubernetes-fourth

curl ClusterIP:8080

如果确定,请同时修改入口的servicePort以匹配Service Port。不要忘记启用入口,因为在minikube上默认禁用该入口:

minikube addons enable ingress
* ingress was successfully enabled

启动入口Pod,并在您的主机中的/ etc / hosts中添加MINIKUBEIP hw4.example.com之后,您应该可以从主机进行卷曲了:

curl hw4.example.com

答案 1 :(得分:0)

部署配置不正确。如下所示更新YAML

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes-fourth
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: hello-kubernetes-fourth
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-fourth
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-fourth
  template:
    metadata:
      labels:
        app: hello-kubernetes-fourth
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80

进入nginx pod并确认您能够访问该服务并获得响应

卷曲http://hello-kubernetes-fourth

这时您应该可以从入口获得服务。