

my-cluster。my_cluster_name=my-clustermy_cluster_vpc_id=$(tccli tke DescribeClusters --cli-unfold-argument --ClusterIds $my_cluster_name --filter Clusters[0].ClusterNetworkSettings.VpcId | sed 's/\\"//g')my_cluster_security_group_id=$(tccli vpc DescribeSecurityGroups --cli-unfold-argument --Filters.0.Name security-group-name --Filters.0.Values tke-worker-security-for-$my_cluster_name --filter SecurityGroupSet[0].SecurityGroupId | sed 's/\\"//g')
my-pod-security-group。记下运行命令后输出中返回的安全组 ID,您将在后面的步骤中使用它。my_pod_security_group_name=my-pod-security-grouptccli vpc CreateSecurityGroup --GroupName "my-pod-security-group" --GroupDescription "My pod security group"my_pod_security_group_id=$(tccli vpc DescribeSecurityGroups --cli-unfold-argument --Filters.0.Name security-group-name --Filters.0.Values my-pod-security-group --filter SecurityGroupSet[0].SecurityGroupId | sed 's/\\"//g')echo $my_pod_security_group_id
tccli vpc CreateSecurityGroupPolicies --cli-unfold-argument --SecurityGroupId $my_cluster_security_group_id --SecurityGroupPolicySet.Ingress.0.Protocol UDP --SecurityGroupPolicySet.Ingress.0.Port 53 --SecurityGroupPolicySet.Ingress.0.SecurityGroupId $my_pod_security_group_id --SecurityGroupPolicySet.Ingress.0.Action ACCEPTtccli vpc CreateSecurityGroupPolicies --cli-unfold-argument --SecurityGroupId $my_cluster_security_group_id --SecurityGroupPolicySet.Ingress.0.Protocol TCP --SecurityGroupPolicySet.Ingress.0.Port 53 --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.Ingress.0.Protocol ALL --SecurityGroupPolicySet.Ingress.0.Port ALL --SecurityGroupPolicySet.Ingress.0.SecurityGroupId $my_pod_security_group_id --SecurityGroupPolicySet.Ingress.0.Action ACCEPTtccli 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
kubectl create namespace my-namespace
my-security-group-policy.yaml。如果您更愿意根据服务帐户标签选择 Pod,则可以替换 podSelector 为 serviceAccountSelector,您必须指定一个或另一个选择器。如果指定多个安全组,则所有安全组中的所有规则都会对选定的 Pod 有效。将$my_pod_security_group_id替换为您在上一步中为 Pod 创建安全组时记下的安全组 ID 。apiVersion: vpcresources.tke.cloud.tencent.com/v1beta1kind: SecurityGroupPolicymetadata:name: my-security-group-policynamespace: my-namespacespec:podSelector:matchLabels:app: my-appsecurityGroups:groupIds:- $my_pod_security_group_id
kubectl apply -f my-security-group-policy.yaml
apiVersion: apps/v1kind: Deploymentmetadata:name: my-deploymentnamespace: my-namespacelabels:app: my-appspec:replicas: 2selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:terminationGracePeriodSeconds: 120containers:- name: nginximage: nginx:latestports:- containerPort: 80nodeSelector:node.kubernetes.io/instance-type: eklettolerations:- effect: NoSchedulekey: eks.tke.cloud.tencent.com/ekletoperator: Exists---apiVersion: v1kind: Servicemetadata:name: my-appnamespace: my-namespacelabels:app: my-appspec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 80
kubectl apply -f sample-application.yaml
kubectl describe pod 会输出 security groups is only support super node, node 10.0.0.1 is not super node。TerminalA。kubectl get pods -n my-namespace -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmy-deployment-866ffd8886-9zfrp 1/1 Running 0 85s 10.0.64.10 eklet-subnet-q21rasu6-8bpgyx9r <none> <none>my-deployment-866ffd8886-b7gzb 1/1 Running 0 85s 10.0.64.3 eklet-subnet-q21rasu6-8bpgyx9r <none> <none>
TerminalB。替换为上一步输出中返回的 Pod ID。kubectl exec -it -n my-namespace my-deployment-866ffd8886-9zfrp -- /bin/bash
TerminalB 中确认示例应用程序工作正常。curl my-app
<!DOCTYPE html><html><head><title>Welcome to nginx!</title>...
my-app 进行域名查找。TerminalA 中,从集群安全组中删除允许 DNS 通信的安全组规则。tccli vpc DeleteSecurityGroupPolicies --cli-unfold-argument --SecurityGroupId $my_cluster_security_group_id --SecurityGroupPolicySet.Ingress.0.Protocol UDP --SecurityGroupPolicySet.Ingress.0.Port 53 --SecurityGroupPolicySet.Ingress.0.SecurityGroupId $my_pod_security_group_id --SecurityGroupPolicySet.Ingress.0.Action ACCEPTtccli vpc DeleteSecurityGroupPolicies --cli-unfold-argument --SecurityGroupId $my_cluster_security_group_id --SecurityGroupPolicySet.Ingress.0.Protocol TCP --SecurityGroupPolicySet.Ingress.0.Port 53 --SecurityGroupPolicySet.Ingress.0.SecurityGroupId $my_pod_security_group_id --SecurityGroupPolicySet.Ingress.0.Action ACCEPT
TerminalB,尝试再次访问应用程序。curl my-app
kubectl delete namespace my-namespacetccli vpc DeleteSecurityGroup --cli-unfold-argument --SecurityGroupId $my_pod_security_group_id
文档反馈