Home Explore Blog CI



kubernetes

4th chunk of `content/en/blog/_posts/2016-08-00-Security-Best-Practices-Kubernetes-Deployment.md`
4f9ce1d449c07fa334f6648b2b425ecee1e4bc3d300133ef0000000100000f0f
The following is an example of a network policy that controls the network for “backend” pods, only allowing inbound network access from “frontend” pods:





```
POST /apis/net.alpha.kubernetes.io/v1alpha1/namespaces/tenant-a/networkpolicys  
{  
  "kind": "NetworkPolicy",

  "metadata": {

    "name": "pol1"

  },

  "spec": {

    "allowIncoming": {

      "from": [{

        "pods": { "segment": "frontend" }

      }],

      "toPorts": [{

        "port": 80,

        "protocol": "TCP"

      }]

    },

    "podSelector": {

      "segment": "backend"

    }

  }

}
 ```



Read more about Network policies [here](https://kubernetes.io/blog/2016/04/Kubernetes-Network-Policy-APIs).



**Apply Security Context to Your Pods and Containers**

When designing your containers and pods, make sure that you configure the security context for your pods, containers and volumes. A security context is a property defined in the deployment yaml. It controls the security parameters that will be assigned to the pod/container/volume. Some of the important parameters are:


| Security Context Setting  | Description  |
| :------------: | :------------: |
| SecurityContext->runAsNonRoot |Indicates that containers should run as non-root user
| SecurityContext->Capabilities |Controls the Linux capabilities assigned to the container.|
| SecurityContext->readOnlyRootFilesystem |Controls whether a container will be able to write into the root filesystem.|
| PodSecurityContext->runAsNonRoot |Prevents running a container with 'root' user as part of the pod|




The following is an example for pod definition with security context parameters:






```
apiVersion: v1  
kind: Pod  
metadata:  
  name: hello-world  
spec:  
  containers:  
  # specification of the pod’s containers  
  # ...  
  securityContext:  
    readOnlyRootFilesystem: true  
    runAsNonRoot: true
 ```



Reference [here](/docs/api-reference/v1/definitions/#_v1_podsecuritycontext).



In case you are running containers with elevated privileges (--privileged) you should consider using the “DenyEscalatingExec” admission control. This control denies exec and attach commands to pods that run with escalated privileges that allow host access. This includes pods that run as privileged, have access to the host IPC namespace, and have access to the host PID namespace. For more details on admission controls, see the Kubernetes [documentation](/docs/reference/access-authn-authz/admission-controllers/).



**Log Everything**

Kubernetes supplies cluster-based logging, allowing to log container activity into a central log hub. When a cluster is created, the standard output and standard error output of each container can be ingested using a Fluentd agent running on each node into either Google Stackdriver Logging or into Elasticsearch and viewed with Kibana.



**Summary**

Kubernetes supplies many options to create a secured deployment. There is no one-size-fit-all solution that can be used everywhere, so a certain degree of familiarity with these options is required, as well as an understanding of how they can enhance your application’s security.  


We recommend implementing the best practices that were highlighted in this blog, and use Kubernetes flexible configuration capabilities to incorporate security processes into the continuous integration pipeline, automating the entire process with security seamlessly “baked in”.








- [Download](http://get.k8s.io/) Kubernetes
- Get involved with the Kubernetes project on [GitHub](https://github.com/kubernetes/kubernetes)
- Post questions (or answer questions) on [Stack Overflow](http://stackoverflow.com/questions/tagged/kubernetes)
- Connect with the community on [Slack](http://slack.k8s.io/)
- Follow us on Twitter [@Kubernetesio](https://twitter.com/kubernetesio) for latest updates

Title: Security Contexts, Logging, and Kubernetes Security Summary
Summary
This section discusses applying security contexts to pods and containers in Kubernetes, including settings like `runAsNonRoot`, `Capabilities`, and `readOnlyRootFilesystem`. It provides an example of a pod definition with security context parameters and mentions the `DenyEscalatingExec` admission control for containers with elevated privileges. The importance of logging container activity into a central log hub is also covered, along with Kubernetes' cluster-based logging capabilities using Fluentd, Google Stackdriver Logging, Elasticsearch, and Kibana. The section concludes with a summary emphasizing the need for familiarity with Kubernetes security options and the incorporation of security processes into the continuous integration pipeline. It provides links to download Kubernetes, get involved with the project, ask questions on Stack Overflow, connect with the community on Slack, and follow updates on Twitter.