Kubernetes——网络策略

网络策略(Network Policy)是用于控制分组的 Pod 资源彼此之间如何进行通信,以及分组的 Pod 资源如何与其他网络端点进行通信的规范。它用于为 Kubernetes 实现更为精细的流量控制,实现租户隔离机制。

  Kubernetes 使用标准的资源对象 "NetworkPolicy" 供管理员按需定义网络访问控制策略。

一、网络策略概述

  Kubernetes 的网络策略功能由其所使用的网络插件实现,因此,仅在使用那些支持网络策略功能的网络插件时才能够配置网络策略,如 Calico、Canal 及 kube-router 等。每种解决方案各有其特定的网络策略实现方式,它们的实现或依赖于节点自身的功能,或借助于 Hypervisor 的特性,也可能是网络自身的功能。Calico 的 calico/kube-controller 即为 Calico 项目中用于将用户定义的网络策略予以实现组件,它主要依赖于节点的 iptables 来实现访问控制功能。

  策略控制器用于监控创建 Pod 时所生成的新 API 端点,并按需为其附加网络策略。当发生需要配置策略的事件时,侦听器会监视到变化,控制器随即响应以进行接口配置和策略应用。

  Pod 的网络流量包含 "流入"(Ingress) 和 "流出"(Egress)两种方法,每种方向的控制策略则包含 "允许" 和 "禁止" 两种。

  默认情况下,Pod 处于非隔离状态,它们的流量可以自由来去。一旦有策略通过选择器规则则将策略应用于 Pod,那么所有未经明确允许的流量都将被网络策略拒绝,不过,其他未被选择器匹配的 Pod 不受影响。

二、部署 Canal 提供网络策略

  Canal 代表了针对云原生应用程序的最佳策略网络解决方案,旨在让用户轻松地将 Calico 和 flannel 网络部署在一起作为统一的网络解决方案,将 Calico 的网络策略执行与 Calico 和 flannel 叠加以及非叠加网络连接选项的丰富功能相组合。

  换句话说,Calico 项目既能够独立地为 Kubernetes 集群提供网络解决方案和网络策略,也能与 flannel 结合一起,由 flannel 提供网络解决方案,而 Calico 此时仅用于提供网络策略,这时我们也可以将 Calico 称为 Canal。Calico 将数据存储于 etcd 中,它支持选择使用专用的 etcd 存储,也能够以 Kubernetes API Server 作为后端存储,这里选择以第二种方式进行。

  结合 flannel 工作时,Calico 提供的默认配置清单中是以 flannel 默认使用的 10.244.0.0/16 作为 Pod 网络,因此,请确保 kube-controller-manager 程序在启动时通过 --cluster-cidr 选项设置使用了此网络地址,并且 --allocate-node-cidrs 的值应设置为 true。

1

2

--cluster-cidr=<your-pod-cidr>

--allocate-node-cidrs=true

  部署前,要在启用了 RBAC 的 Kubernetes 集群中设置必要的相关资源:

1

kubectl apply -f https://docs.projectcalico.org/v3.2/getting-started/kubernetes//installation/hosted/canal/rbac.yaml

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

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

# { {site.prodname}} Roles

# Reference { {site.url}}/{ {page.version}}/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml

kind: ClusterRole

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

  name: calico

rules:

  - apiGroups: [""]

    resources:

      - namespaces

      - serviceaccounts

    verbs:

      - get

      - list

      watch

  - apiGroups: [""]

    resources:

      - pods/status

    verbs:

      - update

  - apiGroups: [""]

    resources:

      - pods

    verbs:

      - get

      - list

      watch

      - patch

  - apiGroups: [""]

    resources:

      - services

    verbs:

      - get

  - apiGroups: [""]

    resources:

      - endpoints

    verbs:

      - get

  - apiGroups: [""]

    resources:

      - nodes

    verbs:

      - get

      - list

      - update

      watch

  - apiGroups: ["networking.k8s.io"]

    resources:

      - networkpolicies

    verbs:

      - get

      - list

      watch

  - apiGroups: ["crd.projectcalico.org"]

    resources:

      - globalfelixconfigs

      - felixconfigurations

      - bgppeers

      - globalbgpconfigs

      - globalnetworksets

      - hostendpoints

      - bgpconfigurations

      - ippools

      - globalnetworkpolicies

      - networkpolicies

      - clusterinformations

    verbs:

      - create

      - get

      - list

      - update

      watch

---

# Flannel roles

# Pulled from https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel-rbac.yml

kind: ClusterRole

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

  name: flannel

rules:

  - apiGroups:

      ""

    resources:

      - pods

    verbs:

      - get

  - apiGroups:

      ""

    resources:

      - nodes

    verbs:

      - list

      watch

  - apiGroups:

      ""

    resources:

      - nodes/status

    verbs:

      - patch

---

# Bind the flannel ClusterRole to the canal ServiceAccount.

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

  name: canal-flannel

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: flannel

subjects:

- kind: ServiceAccount

  name: canal

  namespace: kube-system

---

# Bind the { {site.prodname}} ClusterRole to the canal ServiceAccount.

apiVersion: rbac.authorization.k8s.io/v1beta1

kind: ClusterRoleBinding

metadata:

  name: canal-calico

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: calico

subjects:

- kind: ServiceAccount

  name: canal

  namespace: kube-system

  接下来即可部署 Canal 提供网络策略:

1

https://projectcalico.docs.tigera.io/v3.2/getting-started/kubernetes/installation/hosted/canal/canal.yaml

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

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值