Cloud Native应用交付

  • 首页
  • 关于本站
  • 个人介绍
  • Downloads
  • Repo
    • Github
    • Container
  • F5
    • F5 Python SDK
    • F5-container
    • F5-LBaaS
  • 社交
    • 联系我
    • 微信/微博
    • 公众号
    • 打赏赞助
行至水穷处 坐看云起时
Cloud Native Application Services: cnadn.net
  1. 首页
  2. 容器/k8s
  3. 正文

pod使用hostnetwork导致pod无法访问系统的169.169.0.1的kubernetes service

2017年09月24日 12031点热度 0人点赞 0条评论

k8s ver:1.6.7, 无CNI

使用hostnetwork来部署一个pod

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: nginx-ingress-ds
  labels:
    app: nginx-ingress-ctrl
spec:
  template:
    metadata:
      labels:
        app: nginx-ingress-ctrl
    spec:
      serviceAccountName: nginx-ingress
      hostNetwork: true <<<<<<<<<<使用hostnetwork
      containers:
      - image: nginxdemos/nginx-ingress:1.0.0
        name: nginx-ingress-lb
        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        # Uncomment the lines below to enable extensive logging and/or customization of
        # NGINX configuration with configmaps
        args:
         #- -v=3
         #- -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
          - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret

上述配置文件使用指定hostNetwork: true。发现,pod会用linux系统自身的路由表查找到目的地169.169.0.1:443, linux系统本身没有到169.169.0.1的路由,只能走缺省路由,导致无法连接到kubernetes service,最终导致pod失败。

当pod是非host模式时候,pod发起到kubernetes service 的访问(dst ip/port 169.169.0.1:443)会经过iptables最终做DNAT转到API server的IP:6443上。

所以如果一个pod需要去访问k8s内置的kubernetes service(169.169.0.1)的时候,可能这个pod不能使用hostnetwork模式,否则会出现类似如下情况: (系统使用host linux内置缺省路由去访问169.169.0.1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33992   169.169.0.1:443         SYN_SENT    39547/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33992   169.169.0.1:443         SYN_SENT    39547/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33992   169.169.0.1:443         SYN_SENT    39547/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33992   169.169.0.1:443         SYN_SENT    39547/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33992   169.169.0.1:443         SYN_SENT    39547/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33992   169.169.0.1:443         SYN_SENT    39547/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33992   169.169.0.1:443         SYN_SENT    39547/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33996   169.169.0.1:443         SYN_SENT    39620/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33996   169.169.0.1:443         SYN_SENT    39620/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33996   169.169.0.1:443         SYN_SENT    39620/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33996   169.169.0.1:443         SYN_SENT    39620/nginx-ingress
[root@docker3 ~]# netstat -pan  | grep 443
tcp        0      1 192.168.188.151:33996   169.169.0.1:443         SYN_SENT    39620/nginx-ingress

当遇到上述情形时候,可以考虑强行指定nginx controller使用不安全的api接口访问方式:

Using the flag --apiserver-host: Using this flag --apiserver-host=http://localhost:8080 it is possible to specify an unsecure api server or reach a remote kubernetes cluster using kubectl proxy. Please do not use this approach in production.

https://github.com/kubernetes/ingress/blob/master/docs/troubleshooting.md

 

如果使用了CNI的话,可能遇到指定hostnetwork后,pod并没有在host上监听相关端口,这是由于bug

https://github.com/kubernetes/kubernetes/issues/31307

V1.7才修复

相关文章

  • How to build Nginx Plus as k8s Ingress controller and run with F5 CIS together
  • K8s ingress中nginx可实现功能案例
  • Container Egress Services 容器出向流量策略管控
  • Service Account Token Volume Projection
  • Helm 3 部署NGINX Ingress Controller
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: hostnetwork k8s nginx
最后更新:2017年09月24日

纳米

linjing.io

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据。

纳米

linjing.io

☁️迈向Cloud Native ADC ☁️

认证获得:
TOGAF: ID 152743
Kubernetes: CKA #664
Microsoft: MCSE MCDBA
Cisco: CCNP
Juniper: JNCIS
F5:
F5 Certified Solution Expert, Security
F5 Certified Technology Specialist, LTM/GTM/APM/ASM
F5 Certified BIG-IP Administrator
  • 点击查看本博技术要素列表
  • 归档
    分类
    • Avi Networks
    • Cisco ACI
    • CISCO资源
    • F5 with ELK
    • F5-Tech tips
    • F5技术
    • Juniper
    • Linux
    • Nginx
    • SDN
    • ServiceMesh
    • WEB编程
    • WINDOWS相关
    • 业界文章
    • 交换机技术
    • 化云为雨/Openstack
    • 协议原理
    • 容器/k8s
    • 我的工作
    • 我的生活
    • 网站技术
    • 路由器技术
    • 项目案例
    标签聚合
    flannel gtm network openstack envoy F5 k8s istio neutron nginx docker bigip api irule DNS
    最近评论
    厚嘴唇 发布于 4 个月前(02月08日) ces部署必须是在kube-ovn网络安装好之后才可以吗
    平谷无颜祖 发布于 5 个月前(12月14日) 逐步加入dns及egress,不错不错
    minw9545 发布于 6 个月前(11月17日) 2021-11-18 23:36 现在是下午时间。
    minw9545 发布于 6 个月前(11月17日) 我放了奖励。 2021-11-18 11:36 请提供您的密码。
    xufan 发布于 9 个月前(09月02日) 需要迄今为止需要迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 下载密码 我在202...
    浏览次数
    • Downloads - 75,888 views
    • Github - 72,089 views
    • F5常见log日志解释 - 58,156 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 56,400 views
    • 联系我 - 49,645 views
    • Sniffer Pro 4 70 530抓包软件 中文版+视频教程 - 45,838 views
    • 这篇文档您是否感兴趣 - 36,610 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 30,457 views
    • F5利用Elastic stack(ELK)进行应用数据挖掘系列(2)-DNS - 29,028 views
    • F5利用Elastic stack(ELK)进行应用数据挖掘系列(1)-HTTP - 28,000 views
    链接表
    • Jimmy Song‘s Blog
    • SDNap
    • SDNlab
    • SDN论坛
    • Service Mesh社区
    • 三斗室
    • 个人profile

    COPYRIGHT © 2022 Cloud Native应用交付. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    京ICP备14048088号-1

    京公网安备 11010502041506号