in cmd/kube-egress-cni/main.go [192:254]
func cmdDel(args *skel.CmdArgs) error {
// get cni config
config, err := conf.ParseCNIConfig(args.StdinData)
if err != nil {
return err
}
// get k8s metadata
k8sInfo, err := conf.LoadK8sInfo(args.Args)
if err != nil {
return err
}
conn, err := grpc.NewClient(config.SocketPath,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithStreamInterceptor(grpc_retry.StreamClientInterceptor()),
grpc.WithUnaryInterceptor(grpc_retry.UnaryClientInterceptor()),
grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor),
grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor),
grpc.WithContextDialer(func(ctx context.Context, addr string) (net.Conn, error) {
d := net.Dialer{}
return d.DialContext(ctx, "tcp", addr)
}))
if err != nil {
return err
}
defer conn.Close()
client := v1.NewNicServiceClient(conn)
podNs, err := ns.GetNS(args.Netns)
if err != nil {
return err
}
defer podNs.Close()
err = podNs.Do(func(nn ns.NetNS) error {
_, err = client.NicDel(context.Background(), &v1.NicDelRequest{
PodConfig: &v1.PodInfo{
PodName: string(k8sInfo.K8S_POD_NAME),
PodNamespace: string(k8sInfo.K8S_POD_NAMESPACE),
},
})
if err != nil {
return err
}
ifHandle, err := netlink.LinkByName(consts.WireguardLinkName)
if err != nil {
//ignore error because cni delete may be invoked more than once.
return nil
}
return netlink.LinkDel(ifHandle)
})
if err != nil {
return err
}
err = ipam.New(config.IPAM.Type, args.StdinData).DeleteIP()
if err != nil {
return err
}
return types.PrintResult(&type100.Result{}, config.CNIVersion)
}