Kubernetes'teki en iyi ozelliklerden biri NetworkPolicy'dir. Bu, geliştiricilerin neyin girip neyin cıkacağını kontrol etmesini sağlar.
Kod:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 172.17.0.0/16 except: - 172.17.1.0/24 - namespaceSelector: matchLabels: project: myproject - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 6379 egress: - to: - ipBlock: cidr: 10.0.0.0/24 ports: - protocol: TCP port: 5978
Kubernetes belgelerinden alınan bu ornekte, bunun test-network-policy adlı bir ağ politikası oluşturacağını gorebiliriz. Bu politika, db roluyle eşleşen ve aşağıdaki kuralları uygulayan herhangi bir bolmeye veya bolmeden hem giriş hem de cıkış iletişimini denetler :
Giriş bağlantılarına izin verildi:
Varsayılan ad alanındaki "role = frontend" etiketine sahip herhangi bir kapsul Herhangi bir ad alanında "proje = myproject" etiketine sahip herhangi bir bolme 172.17.0.0/16 icindeki 172.17.1.0/24 dışındaki herhangi bir kaynak IP adresi Cıkış bağlantılarına izin verildi:
10.0.0.0/24 icindeki herhangi bir hedef IP adresi NetworkPolicies, API'leri ağ duzeyinde korumak icin harika bir iş cıkarır, ancak uygulama duzeyinde API'leri korumak icin hicbir şey yapmazlar. API icinde hangi uc noktalara erişilebileceğini kontrol etmek istiyorsanız, yalnızca bolmeleri değil, aynı zamanda bu bolmelerdeki uc noktaları da ayırt edebilmek icin k8'lere ihtiyacınız olacaktır. Bu endişeler bizi RPC kimlik bilgilerine gore yonlendirdi . RPC başına kimlik bilgilerinin onceden var olan gRPC kodunun uzerine kurulması kolaydır. Tek yapmanız gereken, hem akışınıza hem de tekli işleyicilerinize engelleyiciler eklemektir.
Kod:
func (s *Server) UnaryAuthInterceptor(ctx context.Context, req interface, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface, error) // Verified return handler(ctx, req) }
Bu ornek kod parcacığında, bilgi nesnesinden kullanıcı adını, şifreyi ve istenen işlevi alıyoruz. Daha sonra, bu işlevi cağırmak icin doğru haklara sahip olduğundan emin olmak icin muşteriye karşı kimlik doğrulaması yaparız. Bu engelleyici, diğer işlevlerden herhangi biri cağrılmadan once calışacaktır, bu, bir uygulamanın tum işlevleri koruduğu anlamına gelir. İstemci, guvenli bağlantısını başlatır ve aşağıdaki gibi kimlik bilgilerini gonderir:
Kod:
transportCreds, err := credentials.NewClientTLSFromFile(certFile, "") if err != nil perRPCCreds := Creds conn, err := grpc.Dial(endpoint, grpc.WithTransportCredentials(transportCreds), grpc.WithPerRPCCredentials(perRPCCreds)) if err != nil client:= pb.NewRecordHandlerClient(conn) // Can now start using the client
Burada istemci once sunucunun certFile ile eşleştiğini doğrular. Bu adım, istemcinin şifresini yanlışlıkla kotu bir oyuncuya gondermemesini sağlar. Daha sonra istemci , kullanıcı adı ve şifresiyle perRPCCreds yapısını başlatır ve bu bilgiyle sunucuyu arar. İstemci, rpc tanımlı bir işleve her cağrı yaptığında, kimlik bilgileri sunucu tarafından doğrulanacaktır.
gRPC Guvenliği Nasıl Sağlanır ?
Site & Server Administration0 Mesaj
●4 Görüntüleme
- ReadBull.net
- Domain & Sunucu & Web Hosting
- Site & Server Administration
- gRPC Guvenliği Nasıl Sağlanır ?
-
05-09-2022, 16:51:18