訪問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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM