从外部公共 URL 访问 pod

从外部公共 URL 访问 pod

我创建了这个测试 Helm 图表,我想通过公共 URL 域访问它:

https://github.com/rcbandit111/external_domain_helm_chart_poc/blob/main/pod-chart/templates/ingressresource.yaml

入口控制器:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: registry-domain-ingress
spec:
  rules:
    - host: monitor.somedomain.org
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {{ include "pod.fullname" . }}
                port:
                  number: 80

我在公共 DNS 注册表中添加了一条记录:

monitor.somedomain.org ->  4.4.4.4 (node1)
monitor.somedomain.org ->  4.4.4.5 (node2)

但当我尝试打开 URL 链接时,页面未加载。知道可能是什么问题吗?

答案1

您在使用公共 URL 访问 Helm 图表应用程序时遇到问题可能有几个不同的原因。

由于您使用的是公共域名并将其指向节点 IP 地址(4.4.4.4 和 4.4.4.5),因此您当前的入口配置未明确指定节点端口。因此,您必须配置入口控制器以使用节点端口。这使基于互联网的外部流量能够到达 pod。

您可以通过在服务 yaml 文件的端口下添加名为 nodePort 的端口来实现此目的,从服务节点端口范围(默认为 30000-32767)。这样,您就会预先知道 nodePort。为了确保在 Service yaml、ConfigMap 和 Deployment 中使用 nodePort,您可以使用 Helm 将 nodePort 作为参数传入。

以下是通过修改 ingress yaml 来使用 nodeport 的方法:

   apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: registry-domain-ingress #descriptive name for your ingress resource
    spec:
      rules:# List of routing rules for your ingress
        - host: monitor.somedomain.org #your public domain name
          http:# specifies HTTP routing configuration 
            paths:
              - path: / #Matches any path (root path)
                pathType: Prefix #Match requests that start with this path
                backend:# Defines the backend service to route traffic 
                  service:
                    name: {{ include "pod.fullname" . }}#replace with the actual pod service name
                    port:
                      number: 80 #port number of the service (usually 80 for HTTP)
    
       ingress classname:<ingress -class-name>If you want to using a specific ingress class
     external Traffic policy:Local #If required for your configuration 
      Ports: #List of ports exposed by the ingress
     -name :http #optional name for the port 
      Port:80 # External port exposed to the internet
      target port:80 #pod port (port where your application listens)
      nodeport:300080 # choose an unused Nodeport (eg:30080)

通过遵循以下步骤并仔细检查您的入口、DNS、防火墙和应用程序运行状况,您应该能够通过公共 URL 成功访问您的 Helm Chart 应用程序

确保您的 K8s 集群已安装入口控制器。

检查入口控制器的日志,检查入口资源处理方式是否存在任何错误或问题。

确认链接到您的节点的防火墙规则允许所选节点端口(在本例中为端口 30080)上的传入流量。

使用kubectl 获取 pod验证应用服务中的 pod 是否正常运行且健康。

仔细检查入口后端定义中的服务名称是否与 Helm Chart 和命名空间中部署的服务名称相匹配

参考此git链接了解更多信息

相关内容