Kubernetes 主机节点是否应该能够访问集群中的服务 运行?

Should Kubernetes host nodes be able to access services running in the cluster?

我是运行:

摘要:从主机节点查询时服务拒绝响应。这甚至应该工作吗?如果不是,我可以停止用头撞这堵特定的墙...

我可以从本地网络的任何地方访问 service.foo.com,但是如果我尝试使用 cURL 之类的东西从任何主机节点向 service.foo.com 发出请求,我会得到“连接被拒绝”错误(但我可以毫无问题地 ping 服务)。我从 k8s 集群上的任何 pod 运行 中得到相同的行为。

这让事情变得特别困难,因为我正在尝试设置 OIDC 提供程序以用于控制对 k8s 仪表板的访问,并且主机节点需要能够查询提供程序。

网络设置:

kube服务地址:10.233.0.0/18
pods 网段:10.233.64.0/18

MetalLB 配置:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
      - name: default
        protocol: layer2
        addresses:
          - 172.16.31.75-172.16.31.79

描述了入口控制器服务

Name:                     foo-com-ic-nginx-ingress
Namespace:                default
Labels:                   app.kubernetes.io/instance=foo-com-ic
  app.kubernetes.io/managed-by=Helm
  app.kubernetes.io/name=foo-com-ic-nginx-ingress
  helm.sh/chart=nginx-ingress-0.8.0
Annotations:              <none>
Selector:                 app=foo-com-ic-nginx-ingress
Type:                     LoadBalancer
IP Families:              <none>
IP:                       10.233.48.18
IPs:                      <none>
IP:                       172.16.31.76
LoadBalancer Ingress:     172.16.31.76
Port:                     http  80/TCP
TargetPort:               80/TCP
NodePort:                 http  31445/TCP
Endpoints:                10.233.105.18:80
Port:                     https  443/TCP
TargetPort:               443/TCP
NodePort:                 https  31173/TCP
Endpoints:                10.233.105.18:443
Session Affinity:         None
External Traffic Policy:  Local
HealthCheck NodePort:     30406
Events:
  Type    Reason        Age                 From             Message
  ----    ------        ----                ----             -------
  Normal  nodeAssigned  9m4s (x4 over 43m)  metallb-speaker  announcing from node "node4"

描述的服务入口

Name:             my-service
Namespace:        default
Address:          172.16.31.76
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
  SNI routes service.foo.com
Rules:
  Host                 Path  Backends
  ----                 ----  --------
  service.foo.com      /   my-service:80 (10.233.96.27:80)
Annotations:           kubernetes.io/ingress.class: service.com
                         meta.helm.sh/release-name: my-service
                         meta.helm.sh/release-namespace: default
Events:
  Type    Reason          Age                From                      Message
  ----    ------          ----               ----                      -------
  Normal  AddedOrUpdated  46m (x2 over 46m)  nginx-ingress-controller  Configuration for default/my-service was added or updated

以防万一有人在研究自己的问题时遇到这个问题,我最终能够解决这个问题。偶然我注意到我可以从入口控制器 pod 运行 所在的节点卷曲服务。

然后我的解决方法是将入口控制器的安装类型从“部署”更改为“daemonset”。现在入口控制器 pod 在每个节点上运行,我可以从集群中的每个节点访问服务。