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

时间:2021-03-22 20:19:09

标签: kubernetes kubernetes-ingress

我正在跑步:

  • Kubernetes v1.19.7(内部部署,虚拟机。通过 Kubespray 配置)
  • 金属LB
  • 印花布
  • nginx-ingress

总结:服务在从主机节点查询时拒绝响应。这甚至应该起作用吗?如果没有,我可以停止用头撞这堵墙...

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

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

网络设置:

kube 服务地址:10.233.0.0/18
豆荚cidr: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

1 个答案:

答案 0 :(得分:0)

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

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