kubernetes 我可以访问Pod和服务端点,但不能访问入口

yhuiod9q  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(168)

通过入口控制器访问我的k8s API时遇到问题。使用端口转发到我的pod IP ClusterIP服务,我可以验证api是否可访问。但是,当尝试通过入口设置访问时,IP地址不可访问。如何调试?
我的部署设置如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: weather-api
  labels:
    app: webapi
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ingress-weather
  template:
    metadata:
      labels:
        app: ingress-weather
        api: weather
    spec:
      containers:
        - name: api
          image: xyz/weatherforecast:v2
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
              protocol: TCP
            - containerPort: 443
              protocol: TCP

服务:

apiVersion: v1
kind: Service
metadata:
  name: api-svc
spec:
  ports:
    - port: 8100
      targetPort: 80
      name: web
  selector:
    app: ingress-weather
  type: ClusterIP

入口控制器:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: api-ingress
  namespace: app
spec:
  rules:
    - http:
        paths:
        - path: /api
          pathType: Prefix
          backend:
            service: 
              name: api-svc
              port: 
                number: 8100

使用以下端口转发之一,允许我通过//localhost:8080/访问我的API:

kubectl port-forward pod/weather-api-99c9c7fd6-7sr6z 8080:80
kubectl port-forward service/api-svc 8080:8100

kubectl获取svc -n入口-nginx返回:

NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.0.240.185   104.42.145.179   80:32294/TCP,443:31047/TCP   4d2h
ingress-nginx-controller-admission   ClusterIP      10.0.116.19    <none>           443/TCP                      4d2h

但是当我访问www.example.com时//104.42.145.179:32294/api,它没有解析(超时)。
我还能做些什么来找到无法访问的原因?

vd8tlhqk

vd8tlhqk1#

不知道您为什么提到32294,您可以直接访问它。
尝试类似以下内容,因为您现在有端口为80&443的入口控制器
http://104.42.145.179/api
此外,确保您的入口控制器POD正在运行

更新

入口似乎位于错误的****命名空间中:名称空间:应用程序
而您的端口转发来自默认命名空间

kubectl port-forward service/api-svc 8080:8100

因此,当请求到达入口时,它会在app命名空间中找到服务
从入口删除
命名空间**,然后尝试

相关问题