【问题标题】:Unable to connect to pod using ingress无法使用入口连接到 pod
【发布时间】:2019-06-30 08:30:11
【问题描述】:

我正在尝试配置一个在 kubernetes 的端口 5000 中运行的 python 烧瓶应用程序。我已经创建了部署、服务和入口。使用添加到主机文件的域名无法正常工作,但当我尝试通过端口转发时,python 应用程序正在工作。

我尝试了很多更改配置,但没有任何效果。

请告诉我你的建议。

kind: Deployment
metadata:
  name: web-app
  namespace: production
  labels:
    app: web-app
    platform: python
spec:
  replicas:
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-app
        image: XXXXXX/XXXXXX:XXXXXX
        imagePullPolicy: Always
        ports:
        - containerPort: 5000
apiVersion: v1
kind: Service
metadata:
  name: web-app
  namespace: production
spec:
  selector:
    app: web-app
  ports:
  - protocol: TCP
    port: 5000
    targetPort: 5000
  selector:
    run: web-app
kind: Ingress
metadata:
  name: name-virtual-host-ingress
  namespace: production
spec:
  rules:
  - host: first.bar.com
    http:
      paths:
      - backend:
          serviceName: web-app
          servicePort: 5000

kubectl get all -n production

NAME                          READY   STATUS    RESTARTS   AGE
pod/web-app-559df5fc4-67nbn   1/1     Running   0          24m

NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/web-app   ClusterIP   10.100.122.15   <none>        5000/TCP   24m

NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/web-app   1         1         1            1           24m

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/web-app-559df5fc4   1         1         1       24m

kubectl 获取 -n 生产

NAME                        HOSTS           ADDRESS   PORTS   AGE
name-virtual-host-ingress   first.bar.com             80      32s

kubectl 获取 ep web-app -n 生产

NAME      ENDPOINTS   AGE
web-app   <none>      23m

【问题讨论】:

  • 你设置了入口控制器吗?如果没有,Ingress 配置无效。如果你想在没有入口控制器的情况下访问应用程序,你可以将Service的类型更改为nodePort或LoadBalancer
  • @rom 你问的是这个吗? kubectl get ing -n production NAME HOSTS ADDRESS PORTS AGE name-virtual-host-ingress first.bar.com,second.foo.com 80 32s
  • 当kubectl get ep(或kubectl describe service)显示&lt;none&gt;时,这表明服务上的selector:与pod上的labels:不匹配(不是部署,部署模板块内的 pod 规范)。
  • @DavidMaze kubectl get pod web-app-deployment-5bc447bfb-2f5v8 -n production -o yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: "2019-06-30T11:06:26Z" generateName: web-app-deployment-5bc447bfb- labels: app: web-app pod-template-hash: 5bc447bfb name: web-app-deployment-5bc447bfb-2f5v8 namespace: production 它显示了相同的 web-app 标签..
  • 您的服务有不匹配的selector: {run: web-app}。

标签: kubernetes kubernetes-ingress kubernetes-pod amazon-eks


【解决方案1】:

您需要运行一个入口控制器。 https://kubernetes.io/docs/concepts/services-networking/ingress/#prerequisites 的先决条件部分说:

你必须有一个入口控制器来满足一个入口。只创建一个 Ingress 资源是没有效果的。

一个例子是https://kubernetes.github.io/ingress-nginx/deploy/。请务必运行 强制命令 和与您的提供商相关的命令。然后您可以让服务查看分配的 IP:

kubectl get -n ingress-nginx svc/ingress-nginx

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 2021-10-10
    • 2021-06-16
    • 2018-01-21
    • 2018-09-03
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多