1.4 需要允许任何协议和端口从安全组关联的 Pod 到任意安全组关联的 Pod 的入站流量。并且允许安全组关联的 Pod 的任何协议和端口的出站流量。
tccli vpc CreateSecurityGroupPolicies --cli-unfold-argument --SecurityGroupId $my_pod_security_group_id --SecurityGroupPolicySet.Ingress.0.Protocol ALL --SecurityGroupPolicySet.Ingress.0.Port ALL --SecurityGroupPolicySet.Ingress.0.SecurityGroupId $my_pod_security_group_id --SecurityGroupPolicySet.Ingress.0.Action ACCEPT
tccli vpc CreateSecurityGroupPolicies --cli-unfold-argument --SecurityGroupId $my_pod_security_group_id --SecurityGroupPolicySet.Egress.0.Protocol ALL --SecurityGroupPolicySet.Egress.0.Port ALL --SecurityGroupPolicySet.Egress.0.Action ACCEPT
2. 创建一个 Kubernetes 命名空间来部署资源。
kubectl create namespace my-namespace
3. 将 SecurityGroupPolicy 部署到您的集群。
3.1 将以下示例安全策略保存为my-security-group-policy.yaml。如果您更愿意根据服务账户标签选择 Pod,则可以替换 podSelector 为 serviceAccountSelector,您必须指定一个或另一个选择器。如果指定多个安全组,则所有安全组中的所有规则都会对选定的 Pod 有效。将$my_pod_security_group_id替换为您在上一步中为 Pod 创建安全组时记下的安全组 ID 。
它们必须允许来自集群安全组(for kubelet)的入站请求,允许给 Pod 配置的健康检查可以工作。
您的 CoreDNS pod 的安全组必须允许 Pod 安全组的入站 TCP 和 UDP 端口53流量。
它们必须具有必要的入站和出站规则才能与其他 Pod 进行通信。
安全组策略仅适用于新调度的 Pod。它们不会影响正在运行的 Pod。如需存量 Pod 生效,则需要您确认存量 Pod 满足上述条件后手动重建。
3.2 部署策略。
kubectl apply -f my-security-group-policy.yaml
4. 部署示例应用程序使用您在上一步中 podSelector 指定的 my-app 匹配标签。
4.1 将以下内容保存到名为sample-application.yaml。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
labels:
app: my-app
spec:
replicas:2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
terminationGracePeriodSeconds:120
containers:
-name: nginx
image: nginx:latest
ports:
-containerPort:80
nodeSelector:
node.kubernetes.io/instance-type: eklet
tolerations:
-effect: NoSchedule
key: eks.tke.cloud.tencent.com/eklet
operator: Exists
---
apiVersion: v1
kind: Service
metadata:
name: my-app
namespace: my-namespace
labels:
app: my-app
spec:
selector:
app: my-app
ports:
-protocol: TCP
port:80
targetPort:80
4.2 使用以下命令部署应用程序。当您部署应用程序时,Pod 会优先调度到超级节点上,并且将应用您在上一步中指定的安全组到 Pod 上。
kubectl apply -f sample-application.yaml
注意
如果您没有使用 nodeSelector 优先调度到超级节点,当 Pod 调度到其他节点的时候,安全组是不生效的并且 kubectl describe pod 会输出 security groups is only support super node, node 10.0.0.1 is not super node。
5. 查看使用示例应用程序部署的 Pod。此时该终端称为 TerminalA。
kubectl get pods -n my-namespace -o wide
示例输出如下:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES