zoukankan      html  css  js  c++  java
  • 访问k8s内部pod service网络

    kafa部署在k8s中,并且使用statefulset 方式部署,应用pod连接kafka 使用  kafka-0.kafka-hs.sy-platform-demo.svc.cluster.local.:9093, 如果k8s 外部开发测试,无法连接,所以需要外部网络与pod service网络打通

    #kafka注册到zk中
    [zk: localhost:2181(CONNECTED) 5] get /brokers/ids/0 {"jmx_port":-1,"timestamp":"1578999678086","endpoints":["PLAINTEXT://kafka-0.kafka-hs.sy-platform-demo.svc.cluster.local.:9093"],"host":"kafka-0.kafka-hs.sy-platform-demo.svc.cluster.local.","version":3,"port":9093} cZxid = 0x1300000caa ctime = Tue Jan 14 11:01:18 UTC 2020 mZxid = 0x1300000caa mtime = Tue Jan 14 11:01:18 UTC 2020 pZxid = 0x1300000caa cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x36f841793790042 dataLength = 215 numChildren = 0

    网络图谱如下

    关闭完整的节点到节点BGP网格

    如果要为Calico网络显式配置BGP拓扑,则需要关闭完整的节点到节点网格。有关 更改全局BGP设置的说明,nodeToNodeMeshEnabled 设置为flase

    如果您是从头开始构建网络的,不需要完整的节点到节点网格,我们建议在配置节点之前关闭网格。如果要将网络从全网状拓扑更新为其他拓扑(例如,开始使用路由反射器群集来增加缩放比例),请在禁用网状结构之前配置适当的对等点,以确保服务的连续性。

    注意: 会出现无法访问

    先决条件calicoctl 已安装配置

    1 首先 是否具有default BGP配置资源

    [root@master1 ceph_rbd]# calicoctl get bgpconfig default
    Failed to get resources: resource does not exist: BGPConfiguration(default) with error: the server could not find the requested resource (get BGPConfigurations.crd.projectcalico.org default)  #没有创建过

    2.请使用以下命令创建资源。在执行前,根据需要调整 nodeToNodeMeshEnabled和和asNumber线和值。

     cat << EOF | calicoctl create -f -
     apiVersion: projectcalico.org/v3
     kind: BGPConfiguration
     metadata:
       name: default
     spec:
       logSeverityScreen: Info
       nodeToNodeMeshEnabled: false
       asNumber: 63400

    3. 如果资源确实存在,请使用以下命令检索它并将其保存到文件中。

    calicoctl get bgpconfig default --export -o yaml > bgp.yaml

    打开bgpconfig设置文件,修改nodeToNodeMeshEnabledasNumber根据需要,然后保存该文件。有关这些设置的详细信息,请参考BGP配置资源

    vim bgp.yaml

    5. 替换现有的BGP配置设置。

     calicoctl replace -f bgp.yaml

    配置集群内网反射器(网关)

    对于较大的部署,您可以禁用完整的节点到节点网格,并配置一些节点以提供集群内路由反射。这样,每个节点仍将获得所有工作负载路由,但使用的BGP连接数量要少得多。

    1. 确定一个或多个Calico节点充当路由反射器。只要该节点保持正常运行,就只需要一个节点,但是我们建议选择两个或三个节点,以便在其中一些节点需要停机时间进行维护时继续正确的路由传播。

    2. 修改每个节点的节点资源,以:

      • 将节点设置spec.bgp.routeReflectorClusterID为非空的群集ID,例如 224.0.0.1

      • 添加表明该节点是路由反射器的标签。

    查看所有节点

    [root@master1 ~]# calicoctl get node
    NAME      
    master1   
    master2   
    master3   
    node1     
    node2     
    node3     
    node4  

    使用一个节点充当反射器

    命令如下:calicoctl get node <node_name> --export -o yaml > node.yml

    calicoctl get node node4 --export -o yaml > node4.yaml
    apiVersion: projectcalico.org/v3
    kind: Node
    metadata:
      annotations:
        projectcalico.org/kube-labels: '{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"node4","kubernetes.io/os":"linux"}'
      creationTimestamp: "2020-04-01T07:16:09Z"
      labels:
        beta.kubernetes.io/arch: amd64
        beta.kubernetes.io/os: linux
        i-am-a-route-reflector: "true"
        kubernetes.io/arch: amd64
        kubernetes.io/hostname: node4
        kubernetes.io/os: linux
      name: node4
      resourceVersion: "3249621"
      uid: b855402d-ff5c-469b-87e1-0208ebf2c90e
    spec:
      bgp:
        ipv4Address: 172.16.230.28/24
        ipv4IPIPTunnelAddr: 10.20.3.64
        routeReflectorClusterID: 172.16.230.254    #添加

     编辑node.yml,使其包括

    metadata:
      labels:
        i-am-a-route-reflector: true
    spec:
      bgp:
        routeReflectorClusterID: 172.16.230.254

    然后应用更新的YAML。

    calicoctl apply -f node4.yml

    配置BGPPeer资源,以告知其他Calico节点与路由反射器节点对等:

    calicoctl apply -f - <<EOF
    kind: BGPPeer
    apiVersion: projectcalico.org/v3
    metadata:
      name: peer-to-rrs
    spec:
      nodeSelector: !has(i-am-a-route-reflector)
      peerSelector: has(i-am-a-route-reflector)
    EOF

    配置BGPPeer资源,使路由反射器节点相互对等:

    calicoctl apply -f - <<EOF
    kind: BGPPeer
    apiVersion: projectcalico.org/v3
    metadata:
      name: rr-mesh
    spec:
      nodeSelector: has(i-am-a-route-reflector)
      peerSelector: has(i-am-a-route-reflector)
    EOF

    配置IP-in-IP 模式

    • Always: 永远进行 IPIP 封装(默认)
    • CrossSubnet: 只在跨网段时才进行 IPIP 封装,适合有 Kubernetes 节点在其他网段的情况,属于中肯友好方案
    • Never: 从不进行 IPIP 封装,适合确认所有 Kubernetes 节点都在同一个网段下的情况

    将IP-in-IP ipipMode设置Always为时,Calico将使用IP-in-IP路由从启用了Calico的主机发出的所有流量到IP池中的所有Calico网络容器和VM。

    使用的IP-in-IP ipipModeCrossSubnet,IP-in-IP封装也可以选择性地执行,仅用于跨越子网边界的流量。

    导出ippool配置

    calicoctl get ippool default-ipv4-ippool -o yaml > ippool.yaml

    修改 ipipMode 值为 CrossSubnet

    [root@master1 ~]# cat ippool.yaml 
    apiVersion: projectcalico.org/v3
    kind: IPPool
    metadata:
      creationTimestamp: "2020-04-01T07:58:10Z"
      name: default-ipv4-ippool
      resourceVersion: "21004"
      uid: dd5b3e61-8a58-44d0-aac5-d248430a017c
    spec:
      blockSize: 26
      cidr: 10.20.0.0/16
      ipipMode: CrossSubnet
      natOutgoing: true
      nodeSelector: all()
      vxlanMode: Never

    执行

    calicoctl apply -f ippool.yaml

    添加路由:

    172.16.230.249网段

    route add 10.20.0.0 mask 255.255.0.0  172.16.230.28
    
    route add 10.254.0.0 mask 255.255.192.0  172.16.230.28

    参考:

    https://mritd.me/2019/06/18/calico-3.6-forward-network-traffic/

    https://docs.projectcalico.org/v3.6/networking/bgp#configuring-in-cluster-route-reflectors

    https://docs.projectcalico.org/v3.6/networking/ip-in-ip

  • 相关阅读:
    如何禁用Xcode7下iOS9 App传输安全,并修复无法连接服务器错误
    iOS单例清除
    Git忽略规则及.gitignore规则不生效的解决办法
    javascript 在ie8中报“缺少标识符、字符串或数字“问题再现:
    树莓派 远程桌面 设置显示中文
    在IIS Express中调试时无法读取配置文件 错误
    Win7 下IIS(7.5)发布 ASP.NET MVC
    .Net中使用com组件后发生System.ArithmeticException异常的解决办法(Message=算术运算中发生溢出或下溢。)
    CodeSimth
    windows 开机启动 CassiniDev(IIS替代软件)
  • 原文地址:https://www.cnblogs.com/fengjian2016/p/12696966.html
Copyright © 2011-2022 走看看