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日 15584点热度 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可实现功能案例
  • 项目:k8s Gateway API 的BIG-IP实现
  • F5 CES 用融合的思想保护k8s出向流量安全
  • 是时候思考k8s出向流量安全了
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: hostnetwork k8s nginx
最后更新:2017年09月24日

纳米

linjing.io

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

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。

页面AI聊天助手

纳米

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
  • 点击查看本博技术要素列表
  • 归档
    分类
    • AI
    • Automation
    • Avi Networks
    • Cisco ACI
    • CISCO资源
    • F5 with ELK
    • F5-Tech tips
    • F5技术
    • Juniper
    • Linux
    • NGINX
    • SDN
    • ServiceMesh
    • WEB编程
    • WINDOWS相关
    • 业界文章
    • 交换机技术
    • 化云为雨/Openstack
    • 协议原理
    • 容器/k8s
    • 我的工作
    • 我的生活
    • 网站技术
    • 路由器技术
    • 项目案例
    标签聚合
    istio DNS bigip nginx gtm envoy F5 neutron openstack flannel k8s docker network irule api
    最近评论
    汤姆 发布于 8 个月前(09月10日) 嗨,楼主,里面的json怎么下载啊,怎么收费啊?
    汤姆 发布于 8 个月前(09月09日) 大佬,kib的页面可以分享下吗?谢谢
    zhangsha 发布于 1 年前(05月12日) 资料发给我下,谢谢纳米同志!!!!lyx895@qq.com
    李成才 发布于 1 年前(01月02日) 麻烦了,谢谢大佬
    纳米 发布于 1 年前(01月02日) 你好。是的,因为以前下载系统插件在一次升级后将所有的下载生成信息全弄丢了。所以不少文件无法下载。DN...
    浏览次数
    • Downloads - 183,756 views
    • 联系我 - 118,966 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 116,495 views
    • Github - 103,645 views
    • F5常见log日志解释 - 79,770 views
    • 从传统ADC迈向CLOUD NATIVE ADC - 下载 - 74,619 views
    • Sniffer Pro 4 70 530抓包软件 中文版+视频教程 - 74,320 views
    • 迄今为止最全最深入的BIGIP-DNS/GTM原理及培训资料 - 67,770 views
    • 关于本站 - 60,893 views
    • 这篇文档您是否感兴趣 - 55,491 views
    链接表
    • F5SE创新
    • Jimmy Song‘s Blog
    • SDNlab
    • Service Mesh社区
    • 三斗室
    • 个人profile
    • 云原生社区

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

    Theme Kratos Made By Seaton Jiang

    京ICP备14048088号-1

    京公网安备 11010502041506号