Kubernetes 主机节点是否应该能够访问集群中的服务 运行?
Should Kubernetes host nodes be able to access services running in the cluster?
我是运行:
- 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
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 在每个节点上运行,我可以从集群中的每个节点访问服务。
我是运行:
- 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
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 在每个节点上运行,我可以从集群中的每个节点访问服务。