<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Design &#8211; Best DevOps</title>
	<atom:link href="https://www.bestdevops.com/tag/design/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bestdevops.com</link>
	<description>Lets Learn, Do it &#38; Share! Thats a Best DevOps!!!</description>
	<lastBuildDate>Wed, 14 Oct 2026 02:00:18 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Architecting with Google Cloud: Design and Process</title>
		<link>https://www.bestdevops.com/architecting-with-google-cloud-design-and-process/</link>
					<comments>https://www.bestdevops.com/architecting-with-google-cloud-design-and-process/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Mon, 04 Jan 2021 05:44:15 +0000</pubDate>
				<category><![CDATA[Google Cloud]]></category>
		<category><![CDATA[Architecting]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Google cloud]]></category>
		<category><![CDATA[Memorystore]]></category>
		<category><![CDATA[Process]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=15321</guid>

					<description><![CDATA[Source:-https://google.qwiklabs.com This course features a combination of lectures, design activities, and hands-on labs to show you how to use proven [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Source:-https://google.qwiklabs.com</p>
<p>This course features a combination of lectures, design activities, and hands-on labs to show you how to use proven design patterns on Google Cloud to build highly reliable and efficient solutions and operate deployments that are highly available and cost-effective. This course was created for those who have already completed the Architecting with Google Compute Engine or Architecting with Google Kubernetes Engine course.</p>
<p>Prerequisites:<br />
To get the most out of this course, participants should: ●Have completed Architecting with Google Compute Engine, Architecting with Google Kubernetes Engine, or have equivalent experience ●Have basic proficiency with command-line tools ●Have systems operations experience, including deploying and managing applications, either on-premises or in a public cloud environment<br />
Objectives:<br />
●Apply a tool set of questions, techniques and design considerations ●Define application requirements and express them objectively as KPIs, SLO&#8217;s and SLI&#8217;s ●Decompose application requirements to find the right microservice boundaries ●Leverage Google Cloud developer tools to set up modern, automated deployment pipelines ●Choose the appropriate Google Cloud Storage services based on application requirements ●Architect cloud and hybrid networks ●Implement reliable, scalable, resilient applications balancing key performance metrics with cost ●Choose the right Google Cloud deployment services for your applications ●Secure cloud applications, data and infrastructure ●Monitor service level objectives and costs using Stackdriver tools<br />
Audience:<br />
●Cloud Solutions Architects, Site Reliability Engineers, Systems Operations professionals, DevOps Engineers, IT managers. ●Individuals using Google Cloud Platform to create new solutions or to integrate existing systems, application environments, and infrastructure with the Google Cloud Platform.<br />
Course Outline<br />
The course includes presentations, demonstrations, and hands-on labs.<br />
Module 1: Defining the Service</p>
<p>Describe users in terms of roles and personas.<br />
Write qualitative requirements with user stories.<br />
Write quantitative requirements using key performance indicators (KPIs).<br />
Evaluate KPIs using SLOs and SLIs.<br />
Determine the quality of application requirements using SMART criteria.<br />
Module 2: Microservice Design and Architecture</p>
<p>Decompose monolithic applications into microservices.<br />
Recognize appropriate microservice boundaries.<br />
Architect stateful and stateless services to optimize scalability and reliability.<br />
Implement services using 12-factor best practices.<br />
Build loosely coupled services by implementing a well-designed REST architecture.<br />
Design consistent, standard RESTful service APIs.<br />
Module 3: DevOps Automation</p>
<p>Automate service deployment using CI/CD pipelines.<br />
Leverage Cloud Source Repositories for source and version control.<br />
Automate builds with Cloud Build and build triggers.<br />
Manage container images with Google Container Registry.<br />
Create infrastructure with code using Deployment Manager and Terraform.<br />
Module 4: Choosing Storage Solutions</p>
<p>Choose the appropriate Google Cloud data storage service based on use case, durability, availability, scalability and cost.<br />
Store binary data with Cloud Storage.<br />
Store relational data using Cloud SQL and Spanner.<br />
Store NoSQL data using Firestore and Cloud Bigtable.<br />
Cache data for fast access using Memorystore.<br />
Build a data warehouse using BigQuery.<br />
Module 5: Google Cloud and Hybrid Network Architecture</p>
<p>Design VPC networks to optimize for cost, security, and performance.<br />
Configure global and regional load balancers to provide access to services.<br />
Leverage Cloud CDN to provide lower latency and decrease network egress.<br />
Evaluate network architecture using the Cloud Network Intelligence Center.<br />
Connect networks using peering and VPNs.<br />
Create hybrid networks between Google Cloud and on-premises data centers using Cloud Interconnect.<br />
Module 6: Deploying Applications to Google Cloud</p>
<p>Choose the appropriate Google Cloud deployment service for your applications.<br />
Configure scalable, resilient infrastructure using Instance Templates and Groups.<br />
Orchestrate microservice deployments using Kubernetes and GKE.<br />
Leverage App Engine for a completely automated platform as a service (PaaS).<br />
Create serverless applications using Cloud Functions.<br />
Module 7: Designing Reliable Systems</p>
<p>Design services to meet requirements for availability, durability, and scalability.<br />
Implement fault-tolerant systems by avoiding single points of failure, correlated failures, and cascading failures.<br />
Avoid overload failures with the circuit breaker and truncated exponential backoff design patterns.<br />
Design resilient data storage with lazy deletion.<br />
Analyze disaster scenarios and plan for disaster recovery using cost/risk analysis.<br />
Module 8: Security</p>
<p>Design secure systems using best practices like separation of concerns, principle of least privilege, and regular audits.<br />
Leverage Cloud Security Command Center to help identify vulnerabilities.<br />
Simplify cloud governance using organizational policies and folders.<br />
Secure people using IAM roles, Identity-Aware Proxy, and Identity Platform.<br />
Manage the access and authorization of resources by machines and processes using service accounts.<br />
Secure networks with private IPs, firewalls, and Private Google Access.<br />
Mitigate DDoS attacks by leveraging Cloud DNS and Cloud Armor.<br />
Module 9: Maintenance and Monitoring</p>
<p>Manage new service versions using rolling updates, blue/green deployments, and canary releases.<br />
Forecast, monitor, and optimize service cost using the Google Cloud pricing calculator and billing reports and by analyzing billing data.<br />
Observe whether your services are meeting their SLOs using Cloud Monitoring and Dashboards.<br />
Use Uptime Checks to determine service availability.<br />
Respond to service outages using Cloud Monitoring Alerts.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/architecting-with-google-cloud-design-and-process/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Top Considerations When Auditing Cloud Computing Systems</title>
		<link>https://www.bestdevops.com/top-considerations-when-auditing-cloud-computing-systems/</link>
					<comments>https://www.bestdevops.com/top-considerations-when-auditing-cloud-computing-systems/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Thu, 17 Dec 2020 05:30:43 +0000</pubDate>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Auditing]]></category>
		<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[Considerations]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Gukian]]></category>
		<category><![CDATA[landscape]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=15115</guid>

					<description><![CDATA[Source:-https://securityboulevard.com As today’s organizations migrate to the cloud, they expose themselves to a rapidly growing threat landscape. As if protecting [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Source:-https://securityboulevard.com</p>
<p>As today’s organizations migrate to the cloud, they expose themselves to a rapidly growing threat landscape. As if protecting on-premise data wasn’t hard enough, your team faces many new security challenges in the cloud. Now is the time to ask some tough questions. How ready is your company for the next approaching cloud security audit? Any idea what the auditors will be prioritizing? Are you confident that your security management practices are able to keep data safe in the cloud? All right, deep breath.</p>
<p>The good news? You’ve come to the right place, and it’s not too late. On November 19th, 2020, we hosted a webinar with Jacques Nack, CEO at JNN Group, and John Gukian, senior engineer at IBM, and picked their brains on cloud security, compliance, and, specifically, how to audit your cloud environments to suss out potential vulnerabilities. This article will discuss industry changes, what many organizations currently do to keep their cloud data safe, and what your team can do to better prepare for your next security audit. There’s a lot to learn, so let’s get started.</p>
<p><strong>Industry changes</strong><br />
Organizations have increasingly turned to cloud services in the last decade. In 2010, worldwide spending on public cloud services was 76.94 billion with projected growth to 362 billion by 2022. Keep in mind, 67% of enterprise infrastructure will be cloud-based and a whopping 82% of workload will be in the cloud by the end of 2020. Cloud services offer organizations increased agility, flexibility, and speed, but many aren’t prepared for the increased security and compliance challenges of using cloud resources.</p>
<p>Security risk has grown exponentially with the arrival of remote workforces. Cloud data is being accessed from anywhere and everywhere, attackers have more vulnerabilities to target, and the job of safeguarding data is more challenging than ever. Companies now realize security and compliance in the cloud requires ongoing, relentless effort.</p>
<p><strong>Addressing security in the cloud</strong></p>
<p>Securing data in your cloud environments comes with unique challenges and raises a new set of questions. What’s the appropriate governance structure for an organization’s cloud environment and the data that resides within them? How should cloud services be configured for security? Who is responsible for security, the cloud service provider or the user of that cloud service?</p>
<p>Cloud compliance is becoming front of mind for organizations of all sizes. Smaller companies with limited staff and resources tend to rely more on cloud vendors to run their businesses and to address security risks (we’ll get into why this is a bad idea later in this article). Often roles will overlap with team members wearing many hats in smaller operations. Larger enterprises frequently keep more security and compliance duties in-house, using vast resources to create individual teams for threat hunting, risk management, and compliance/governance programs.</p>
<p>Regardless of size, the challenge of balancing security and business objectives looms large for all companies. Security must be built around the business, and Jacques accurately describes the nature of the relationship: “Security is always a support function around your business.”</p>
<p>Many teams seeking to build assurance while managing cost rely on Governance, Risk and Compliance (GRC) frameworks to keep their data secure in the cloud. There are many available, such as the Cloud Security Alliance Cloud Controls Matrix (CSA CCM), NIST 70053, and ISO 27001, which can help your team better understand cloud-specific compliance considerations and prepare for IT compliance audits.</p>
<p>Which one you choose should depend on your organization’s unique circumstances, preferences, and partners. For example, the Cloud Security Alliance Cloud Controls Matrix is specifically designed to provide fundamental security principles to guide organizations in assessing the overall security risk of their cloud environments. FEDRAMP would be a sensible choice for companies doing business with the federal government. Jacques recommends taking the time to thoroughly understand your business environment, risk tolerance, and maturity level to implement controls before finalizing your risk framework.</p>
<p><strong>Key Security and Compliance Considerations When Operating in the Cloud</strong></p>
<p>When assessing the security posture of your cloud environment, the first question both you and your auditor need to ask is, “Where is your data going?” “Your data’s journey—how it’s received, stored, handled, and treated by third parties—will determine your cloud security and compliance agenda,” says Jacques. All security controls and processes must align with your data’s flow around business objectives. Keep in mind that security’s role is supportive but must never become secondary.</p>
<p><strong>Security by design</strong></p>
<p>During the age of legacy systems, security was often “bolted on” as an after-thought. This doesn’t fly today as cloud systems demand a renewed awareness and commitment from the top, embedding security into the company culture and daily operations.</p>
<p>With this new security by design mindset, all departments share responsibility and empowerment in the decision process. Security by design is the only way modern enterprises can achieve the agility and flexibility needed to face the cloud’s continually evolving threat landscape.</p>
<p><strong>Building your cloud compliance program</strong></p>
<p>Both of the experts we interviewed agree that today’s organizations need an established cyber program to help prepare for cloud compliance audits. If your company doesn’t have established security management processes, you will struggle when it comes to passing cloud audits.</p>
<p>So, what does your organization need to do to ensure compliance? Below are some key steps to create a compliance program:</p>
<p>Determine your level of risk tolerance<br />
Assign critical roles like security and privacy officers<br />
Select the compliance framework that you will build around<br />
Design your controls in alignment with business objectives<br />
Adopt a privacy policy to govern how data is shared<br />
Draft an administration contract to document your data handling policies<br />
Adhering to these steps will help you create a solid foundation for maintaining information security in your cloud environment.</p>
<p><strong>Key Compliance Considerations for Cloud Environments</strong><br />
One of the most important things to focus on is asset management. You need to document all the cloud services within your cloud environment as well as the data that resides within them. Organizations should define how all cloud services should be securely configured, to prevent them from becoming exploitable.</p>
<p><strong>Knowing What Regulations Apply to Your Data</strong></p>
<p>This can be tricky because you’ll need to keep up with region-specific and sometimes overlapping privacy regulations. For example, you’re doing business in Italy and must adhere to GDPR, but Italy may also have its own set of required laws.</p>
<p>Cloud Strategy &amp; Architecture</p>
<p>Organizations should clearly define their cloud account structure, ownership, and accountability.</p>
<p><strong>Change Control</strong></p>
<p>The agility, speed, and flexibility of cloud environments make changes difficult to control. Change processes in traditional on-premise environments typically involve multiple roles and approvals and could take days or weeks. With the cloud, infrastructure is software, and their entire lifecycle may only last minutes or seconds. Companies should use automation and leverage cloud services to continuously monitor configurations and immediately remediate issues.</p>
<p><strong>Signs of success</strong></p>
<p>How do you know your organization’s cloud security and compliance program is positioned for success? Besides getting a thumbs up from auditors, there are other ways to gauge your program’s effectiveness.</p>
<p>John Gukian suggests looking at a company’s onboarding process and how new staff is introduced to security policy. Is there a well-understood set of policies and procedures to guide the onboarding process? How is access control handled? What is taught during the initial training period regarding security? Are awareness and best practices emphasized in the daily routine out of the gate?</p>
<p>Speaking of training, are there continuous education programs to keep staff current on rapidly changing cloud threats and remediation tactics? Hopefully so, because in the final analysis, training can make the difference in driving high levels of security awareness.</p>
<p>Passing your compliance audit is the crowning act of affirmation that pleases stakeholders—feel free to take a deserved moment to jump in the air and fist bump your teammates. However, remember cloud compliance results from a program of well-documented policies and procedures built on a continuous pattern of disciplined habits and company-wide awareness.</p>
<p><strong>Conclusion</strong><br />
Securing cloud environments today comes with unique challenges, and verifying compliance is an ongoing quest for organizations and external auditors. Securing your cloud environment starts with understanding all cloud services in your environment and the flow of data between various services and applications. You’ll also need to pay close attention to who gets access to that data and who is authorized to make changes to configurations. It is only then that your team can create the proper processes and controls to ensure safety and compliance in the cloud.</p>
<p>Compliant organizations have established, well-documented cyber programs modeled on appropriate risk management frameworks. Their leaders embed security awareness into daily operations. They continually ingrain security awareness into their culture with robust awareness training.</p>
<p>So, do you feel better prepared for your next cloud compliance audit? We hope so; at the very least, you know the steps secure and compliant organizations take to keep their data safe in the cloud, and that’s what we call a good start.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/top-considerations-when-auditing-cloud-computing-systems/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Using the saga design pattern for microservices transactions</title>
		<link>https://www.bestdevops.com/using-the-saga-design-pattern-for-microservices-transactions/</link>
					<comments>https://www.bestdevops.com/using-the-saga-design-pattern-for-microservices-transactions/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Sat, 05 Dec 2020 05:49:56 +0000</pubDate>
				<category><![CDATA[Microservices]]></category>
		<category><![CDATA[choreography]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[EDI]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=14829</guid>

					<description><![CDATA[Source:-searchapparchitecture.techtarget.com Breaking business actions into their smallest possible units through microservices seems like a wonderful idea. However, in business-critical scenarios, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Source:-searchapparchitecture.techtarget.com</p>
<p>Breaking business actions into their smallest possible units through microservices seems like a wonderful idea. However, in business-critical scenarios, the architecture needs to align and coordinate a half-dozen different distributed services and systems. If any step fails, an entire business process may need to roll back and remediate, much like a failed database transaction.</p>
<p>Microservices, by default, have no coordinating or controlling function: Individual services should inherently have no knowledge of the others outside of them. As such, maintaining smooth process flows between systems is much easier said than done without some kind of supervising controller mechanism. Fortunately, we can accomplish this through an architectural design known as the saga pattern.</p>
<p><strong>What is the saga design pattern?</strong><br />
Picture an electronic data interchange (EDI) system interface that takes orders from customers and passes it to a product ordering system. That ordering service then sets off a chain of service calls that alert downstream manufacturing and shipping systems to finish the transaction. The diagram below shows a sample pattern illustrating this, where services call each other in a &#8220;round robin&#8221; style. Once the entire transaction chain is finalized, shipping sends a message to the product order service to confirm its completion. This can be thought of as a service choreography method.</p>
<p>Typically, the application will perform each one of these actions one at a time. If both the manufacturing order and the shipping order go through, but the payment transaction fails, either a team member or system must send the preceding services an alert to roll back.</p>
<p>Unfortunately, things get a little more complex when large-scale business transactions span significant periods of time. If any of those systems fail along the way, or the order is cancelled, we need a system that can perform a logical rollback and reset all those systems and transactions. For instance, a single failure during the payment transaction could very well require teams to roll back dozens of previous transactions that were completed by dozens of separate systems.</p>
<p>Airline ticketing systems are a perfect example of this problem. An unexpected event can cause people to cancel a trip minutes before the plane takes off. That single cancellation will cause ticketing systems to adjust seat availability, luggage to reroute, payment systems to issue any necessary refunds &#8212; and those are likely just a few of the steps involved.</p>
<p>As you can imagine, this system will need some way to &#8220;backwash&#8221; itself by reversing some of the earlier messages between the web services. Unfortunately, our transactions are just too complex and long-running to try to simply call all the services and commit them. This requires a controller with a little more nuance than a master program. This requires a controller that can take ownership over the entire process, which is where the saga pattern steps into the picture to deliver service orchestration.</p>
<p><strong>Implementing saga for web services</strong><br />
To illustrate the saga design pattern, imagine that your team implements an enterprise service bus that listens for particular transaction events, and then forwards messages to the systems to start their operation. Once the bus creates message that represents the event, it is sent to any service associated with that event. In this case, the controller is a web service that is triggered by that event. That controller makes function calls to the next business web service in the queue.</p>
<p><strong>Note this gives us two kinds of services:</strong></p>
<p>The controllers, which receive events in the form of messages and then relay functional instructions to other services; and<br />
The services that carry out the actual business process that needs to happen, and then communicate their completion to move the transaction along.</p>
<p>To implement these controller services, you can essentially create an event handler for an event-driven application, or introduce a finite state machine that simulates sequential logic. That component can then take the message, determine where it came from, analyze its status, and then process the next command. This can be accomplished simply through a switch statement, a set of nested IF commands, or even a single database lookup.</p>
<p>Keep in mind that implementing this design can still be tricky if the overall application demands high reliability. For example, imagine the controller service crashes after it triggers an &#8216;order placed&#8217; event, but before it can pass a &#8216;payment complete&#8217; event. When that service restarts, it will need to access some sort of transaction log, find the unprocessed transactions, resubmit the event (or events), and mark the work as done. This leaves the possibility that if a commit fails, a system will shut itself down after it sends the event, but before it actually confirms the commit. There are a number of architectural patterns that resolve this specific issue, but the simplest by far is to allow redundant messaging, but program the services to ignore them as needed.</p>
<p><strong>Should you implement the saga design pattern?</strong><br />
The goal of the saga design pattern is primarily to take long-running, multisystem business processes and add the ability to roll back failed systems in an intelligent manner. However, it does add more code, which means new layers of complexity, debugging challenges, bandwidth requirements and processing power.</p>
<p>Put bluntly, an orchestration-focused saga pattern will usually prove to be overkill for simple application-based transactions. Unless your organization is notably struggling to manage large chains of business processes, the code complexity involved in a saga design pattern may cause more problems than it solves. But, if long-running transactions keep you up at night &#8212; especially when it comes to handling failures &#8212; the saga pattern may be the answer you&#8217;ve been looking for.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/using-the-saga-design-pattern-for-microservices-transactions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SoftServe Achieves Premier Consulting Partner Status in AWS Partner Network</title>
		<link>https://www.bestdevops.com/softserve-achieves-premier-consulting-partner-status-in-aws-partner-network/</link>
					<comments>https://www.bestdevops.com/softserve-achieves-premier-consulting-partner-status-in-aws-partner-network/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Wed, 28 Oct 2020 06:46:21 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[APN]]></category>
		<category><![CDATA[architect]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[migrate]]></category>
		<category><![CDATA[SoftServe]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=14104</guid>

					<description><![CDATA[Source:-https://www.oaoa.com SoftServe, a leading digital authority and consulting company, announces it has achieved Premier Consulting Partner status in the Amazon [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Source:-https://www.oaoa.com</p>
<p>SoftServe, a leading digital authority and consulting company, announces it has achieved Premier Consulting Partner status in the Amazon Web Services (AWS) Partner Network (APN). The APN Premier Consulting Partner status differentiates SoftServe as an APN Partner that demonstrates expertise and notable success in helping customers design, architect, build, migrate, and manage workloads on AWS.</p>
<p>We are committed to our clients’ success in realizing the advantages of AWS to transform and future-proof their business, delivering end-to-end solutions that solve complex enterprise challenges while enhancing speed, agility, and scalability,” said Andrew Greene &#8211; Associate Vice President, Global Partnerships &amp; Alliances at SoftServe. “We are excited to join the ranks of APN Premier Consulting Partners who have proven expertise at the highest level with the breadth of services and pace of innovation of AWS.”</p>
<p>To become an APN Premier Consulting Partner, companies must complete a rigorous approval process through accreditations and certifications; demonstrate a long-term investment in their relationship with AWS; and have extensive expertise in deploying customer solutions on AWS. APN Premier Consulting Partners also have a strong team of AWS Trained &amp; Certified technical consultants and have deep expertise in project management and professional services.</p>
<p>SoftServe holds AWS DevOps, SaaS, Data &amp; Analytics, Retail, and Financial Services Competencies. The company’s AWS solution areas span healthcare, financial services, retail, energy, and high-tech ISV industries; and with specialized teams of solution architects, big data engineers, and data scientists, SoftServe can guide customers to achieve Cloud success across the full spectrum of AWS Cloud services, workloads, and customer use cases.</p>
<p>Get the most from your AWS investments with speed, agility, and scalability to decrease time to Cloud value while ensuring your projects are deployed on time and on budget. Visit SoftServe’s AWS page to get started today.</p>
<p>SoftServe is a digital authority that advises and provides at the cutting-edge of technology. We reveal, transform, accelerate, and optimize the way enterprises and software companies do business. With expertise across healthcare, retail, energy, financial services, software, and more, we implement end-to-end solutions to deliver the innovation, quality, and speed that our clients’ users expect.</p>
<p>SoftServe delivers open innovation—from generating compelling new ideas, to developing and implementing transformational products and services. Our work and client experience is built on a foundation of empathetic, human-focused experience design that ensures continuity from concept to release. We empower enterprises and software companies to (re)identify differentiation, accelerate solution development, and vigorously compete in today’s digital economy. No matter where you are in your journey.</p>


<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe  id="_ytid_18585"  width="675" height="379"  data-origwidth="675" data-origheight="379" src="https://www.youtube.com/embed/?enablejsapi=1&#038;list=PLTCuRW0ikUdMFARYSiWm733n1DcCem6bN&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;" class="__youtube_prefs__  epyt-is-override  no-lazyload" title="YouTube player"  allow="fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen data-no-lazy="1" data-skipgform_ajax_framebjll=""></iframe>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/softserve-achieves-premier-consulting-partner-status-in-aws-partner-network/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>What Is DevSecOps and How to Enable It in Your SDLC</title>
		<link>https://www.bestdevops.com/what-is-devsecops-and-how-to-enable-it-on-your-sdlc/</link>
					<comments>https://www.bestdevops.com/what-is-devsecops-and-how-to-enable-it-on-your-sdlc/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Tue, 11 Feb 2020 05:10:26 +0000</pubDate>
				<category><![CDATA[DevSecOps]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Git systems]]></category>
		<category><![CDATA[Planning]]></category>
		<category><![CDATA[QA Testing]]></category>
		<category><![CDATA[SDLC]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=10504</guid>

					<description><![CDATA[DevSecOps embeds security into every phase of the software development lifecycle. Learn what it is, why it matters, and how to enable it across your DevOps pipeline in five practical phases.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">As organizations accelerate software delivery through Agile and DevOps practices, security can no longer be treated as a final gate before release. DevSecOps addresses this by making security a shared responsibility across the entire Software Development Lifecycle (SDLC)—from initial planning through production monitoring.</p>



<h2 class="wp-block-heading">What Is DevSecOps?</h2>



<p class="wp-block-paragraph">DevSecOps—short for Development, Security, and Operations—is a methodology that integrates security practices and accountability into every phase of the application lifecycle. Rather than treating security as a separate audit performed at the end of a release cycle, DevSecOps distributes security responsibility across developers, QA engineers, security specialists, and operations teams alike.</p>



<p class="wp-block-paragraph">When applied to the SDLC, DevSecOps enables continuous integration of security checks: code is continuously analyzed, tested, and validated against known vulnerabilities throughout development, not just before a production push. This approach also helps reduce the cost of compliance, since issues are caught earlier when they are cheaper and faster to fix.</p>



<h2 class="wp-block-heading">Why Does DevSecOps Matter?</h2>



<p class="wp-block-paragraph">Vulnerabilities are discovered constantly across platforms, libraries, and operating systems. Patches are released regularly, but teams that only apply security thinking at the end of a pipeline are perpetually catching up. A single unpatched dependency or misconfigured infrastructure component can expose an entire application to exploitation.</p>



<p class="wp-block-paragraph">In a fast-moving DevOps environment—where code changes multiple times per day and infrastructure is defined as code—manual, periodic security reviews are simply not sufficient. DevSecOps provides a continuous feedback loop that keeps security posture aligned with the pace of development.</p>



<h2 class="wp-block-heading">Key Benefits of DevSecOps</h2>



<ul class="wp-block-list">
<li>Reduces vulnerabilities present in application source code.</li>
<li>Reduces vulnerabilities in Infrastructure as Code (IaC) definitions.</li>
<li>Decreases the attack surface by limiting exploitable paths into the application.</li>
<li>Improves application stability, availability, and overall security posture.</li>
<li>Reduces downtime caused by security incidents or emergency patching.</li>
<li>Lowers compliance costs by surfacing issues earlier in the development cycle.</li>
</ul>



<h2 class="wp-block-heading">How to Enable DevSecOps in Your Current Pipeline: Five Phases</h2>



<p class="wp-block-paragraph">Integrating DevSecOps into an existing DevOps pipeline does not require rebuilding your workflow from scratch. The following five phases provide a structured path for incrementally embedding security into your SDLC.</p>



<h3 class="wp-block-heading">Phase 1: Secure Local Development</h3>



<p class="wp-block-paragraph">Security starts on the developer&#8217;s workstation. Most modern applications rely on open-source libraries and containerized services. If developers are using Docker images to replicate services locally, those images should come from trusted registries and be scanned for known vulnerabilities before use. Even official images from major providers can contain unpatched CVEs. Tools such as <strong>Trivy</strong> or <strong>Snyk Container</strong> can scan images during local development. Establishing a baseline of secure, up-to-date base images ensures that vulnerabilities are not baked into the development environment from day one.</p>



<h3 class="wp-block-heading">Phase 2: Version Control and Static Security Analysis</h3>



<p class="wp-block-paragraph">When developers push code to a version control system (VCS) such as Git, automated security checks should trigger immediately. Static Application Security Testing (SAST) tools analyze source code without executing it, identifying common vulnerabilities like injection flaws, hardcoded secrets, and insecure dependencies.</p>



<p class="wp-block-paragraph">Dependency scanning is equally important. Tools such as <strong>Snyk</strong> or <strong>Sonatype Nexus</strong> can automatically audit third-party libraries against databases of known vulnerabilities every time a pull request is opened. Blocking merges when critical vulnerabilities are detected prevents insecure code from advancing through the pipeline.</p>



<h3 class="wp-block-heading">Phase 3: Continuous Integration and Secure Build</h3>



<p class="wp-block-paragraph">The CI/CD build environment itself must be hardened. Build servers should communicate exclusively over HTTPS, be isolated from the public internet where possible, and have access controls enforced. Build artifacts—container images, packages, or binaries—should be scanned for vulnerabilities before being promoted to any environment.</p>



<p class="wp-block-paragraph">Common CI platforms used in DevSecOps pipelines include <strong>Jenkins</strong>, <strong>CircleCI</strong>, <strong>AWS CodeBuild</strong>, <strong>GitHub Actions</strong>, and <strong>Azure DevOps</strong>. Each can be extended with security scanning plugins or pipeline steps that fail the build when unacceptable risks are detected.</p>



<h3 class="wp-block-heading">Phase 4: Secrets Management and Secure Deployment</h3>



<p class="wp-block-paragraph">Environment-specific configuration—database credentials, API keys, certificates—must never be stored in source code or passed as plain-text environment variables. A dedicated secrets manager such as <strong>HashiCorp Vault</strong>, <strong>AWS Secrets Manager</strong>, or <strong>Azure Key Vault</strong> should be used to inject secrets at runtime. The CI/CD tool retrieves and injects these values securely without exposing them in logs or pipeline definitions.</p>



<p class="wp-block-paragraph">During deployment, enforce least-privilege access: the deployment process should only have permission to perform the specific actions it requires—nothing more.</p>



<h3 class="wp-block-heading">Phase 5: Infrastructure Security and Runtime Monitoring</h3>



<p class="wp-block-paragraph">Once the application is in production, continuous monitoring is essential. An Intrusion Detection System (IDS) monitors host and network activity for suspicious behavior. Open-source tools such as <strong>OSSEC</strong> or its successor <strong>Wazuh</strong> provide host-based intrusion detection, log analysis, and compliance reporting across your server fleet.</p>



<p class="wp-block-paragraph">In addition to IDS, Application Performance Monitoring (APM) tools and cloud-native monitoring services provide visibility into runtime behavior, helping teams detect anomalies that may indicate an active exploit or a misconfiguration causing unintended exposure.</p>



<p class="wp-block-paragraph">No application is 100% secure after deployment. New vulnerabilities are disclosed daily. The goal of this continuous cycle is to detect, assess, and remediate issues as quickly as possible—closing the window of exposure before it can be exploited.</p>



<h2 class="wp-block-heading">Essential Tools for a DevSecOps Pipeline</h2>



<h3 class="wp-block-heading">Tooling</h3>



<ul class="wp-block-list">
<li><strong>CI/CD Platform</strong> — Jenkins, GitHub Actions, CircleCI, AWS CodeBuild, Azure DevOps</li>
<li><strong>Version Control System</strong> — Git (GitHub, GitLab, Bitbucket)</li>
<li><strong>SAST / Dependency Scanning</strong> — Snyk, Sonatype Nexus, SonarQube, Semgrep</li>
<li><strong>Container Scanning</strong> — Trivy, Snyk Container, Clair</li>
<li><strong>Secrets Management</strong> — HashiCorp Vault, AWS Secrets Manager, Azure Key Vault</li>
<li><strong>IaC Security Scanning</strong> — Checkov, tfsec, KICS</li>
<li><strong>Intrusion Detection</strong> — OSSEC, Wazuh</li>
<li><strong>Runtime Monitoring / APM</strong> — Datadog, New Relic, AWS CloudWatch, Prometheus + Grafana</li>
</ul>



<h3 class="wp-block-heading">Core Processes</h3>



<ul class="wp-block-list">
<li>Automated static and dependency vulnerability scanning on every commit or pull request</li>
<li>Dynamic Application Security Testing (DAST) against running environments</li>
<li>Automated regression and integration testing</li>
<li>Automated artifact promotion gated on security scan results</li>
<li>Continuous deployment with secrets injected at runtime</li>
<li>Ongoing runtime monitoring and alerting</li>
</ul>



<h2 class="wp-block-heading">An Ideal DevSecOps Workflow</h2>



<p class="wp-block-paragraph">The following represents a typical end-to-end DevSecOps workflow:</p>



<ol class="wp-block-list">
<li>A developer writes new code and opens a pull request in the VCS. Automated SAST and dependency scans run immediately.</li>
<li>QA or a security engineer reviews the static analysis results alongside the functional code review. Critical findings must be resolved before merge.</li>
<li>On merge to the main branch, the CI pipeline builds the artifact and scans the resulting container image or package for vulnerabilities.</li>
<li>Infrastructure for the test environment is provisioned automatically using IaC tools (e.g., Terraform, AWS CloudFormation, Pulumi), with security baselines applied via configuration management.</li>
<li>The automated test suite runs against the deployed test environment, covering functional, integration, API, and security tests (e.g., DAST scans using OWASP ZAP or a comparable tool).</li>
<li>On a successful test run, the artifact is promoted and deployed to production via the CD pipeline, with secrets injected securely at runtime.</li>
<li>The production deployment is monitored continuously using APM and IDS tooling. Alerts are routed to the on-call team for rapid response.</li>
</ol>



<h2 class="wp-block-heading">Common Challenges When Adopting DevSecOps</h2>



<h3 class="wp-block-heading">Tool Sprawl</h3>



<p class="wp-block-paragraph">Introducing too many security tools at once creates cognitive overload and alert fatigue, particularly for teams not yet familiar with security workflows. The recommended approach is to start with the highest-value tools—typically dependency scanning and secrets management—and add more capabilities as the team builds confidence and process maturity.</p>



<h3 class="wp-block-heading">Cultural Adoption</h3>



<p class="wp-block-paragraph">DevSecOps is as much a cultural shift as a technical one. Developers need to understand why security gates exist and how to act on scan results. Ongoing training, clear documentation, and treating security findings with the same priority as functional bugs all help embed security into the team&#8217;s day-to-day habits.</p>



<h3 class="wp-block-heading">Chasing Perfection</h3>



<p class="wp-block-paragraph">A DevSecOps pipeline will not be perfect from day one, and that is acceptable. Teams that try to enforce zero-tolerance policies before the process is mature often create friction that slows delivery without meaningfully improving security. Establish risk thresholds, start with critical and high-severity findings as hard blockers, and refine policies incrementally as the pipeline matures.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">DevSecOps is not an optional add-on for mature organizations—it is the foundation of responsible software delivery in any environment where speed and security must coexist. By embedding security checks at each phase of the SDLC and distributing security accountability across the entire team, organizations reduce their exposure, improve compliance, and build higher-quality software. Start with the phases most relevant to your current risk profile, invest in team education, and iterate toward a fully automated security pipeline over time.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/what-is-devsecops-and-how-to-enable-it-on-your-sdlc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Architectural Nexus Named 2019 Intermountain Design Firm of the Year</title>
		<link>https://www.bestdevops.com/architectural-nexus-selected-as-2019-intermountain-design-firm-of-the-year/</link>
					<comments>https://www.bestdevops.com/architectural-nexus-selected-as-2019-intermountain-design-firm-of-the-year/#respond</comments>
		
		<dc:creator><![CDATA[Roushan Kumar]]></dc:creator>
		<pubDate>Tue, 11 Jun 2019 07:47:23 +0000</pubDate>
				<category><![CDATA[Nexus]]></category>
		<category><![CDATA[Architectural]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Firm]]></category>
		<category><![CDATA[Intermountain]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=5297</guid>

					<description><![CDATA[Salt Lake City-based Architectural Nexus earned ENR's 2019 Intermountain Design Firm of the Year distinction by championing regenerative design, employee ownership, and people-centered architecture across healthcare, higher education, and mixed-use projects.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Source: <a href="https://www.enr.com" rel="noopener">ENR.com</a>. Original reporting by ENR; this article summarizes and expands on their coverage.</em></p>



<h2 class="wp-block-heading">A People-First Philosophy Drives Award-Winning Firm</h2>



<p class="wp-block-paragraph">On Kenner Kingston&#8217;s desk at Salt Lake City-based Architectural Nexus sit schematic sketches that tell the story of the firm&#8217;s evolving mission. They are not renderings for a hospital wing or a research laboratory—two market segments where Architectural Nexus has built considerable expertise—but rather plans for a rainwater collection and reuse system for an off-the-grid home in Moab, Utah. The firm is collaborating with a community nonprofit that helps low-income residents construct their own sustainable straw-bale homes in the desert region.</p>



<p class="wp-block-paragraph">That project encapsulates what Kingston, president of Architectural Nexus, describes as a fundamental shift in the firm&#8217;s thinking over the past five years.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&#8220;In the past five or so years, we&#8217;ve had a real shift in our thinking. It is not about the project or the building, it is about the people. We are people driven in the pursuit of meaningful experiences.&#8221;</p><cite>— Kenner Kingston, President, Architectural Nexus</cite></blockquote>



<p class="wp-block-paragraph">That philosophy earned Architectural Nexus recognition as ENR&#8217;s 2019 Intermountain Design Firm of the Year. The firm was founded through the 2003 merger of Jensen Haslem Architects and Thomas Petersen Hammond Architects, and has since grown to nearly 120 employees with offices in Salt Lake City and Sacramento, California. The firm reported revenue of $19.9 million in 2017 and $22 million in 2018, regularly ranking among the top ten design firms in the Intermountain region.</p>



<h2 class="wp-block-heading">A Diverse and Multidisciplinary Design Studio</h2>



<p class="wp-block-paragraph">Robb Harrop, director of design at Architectural Nexus, articulates the firm&#8217;s client-centered approach succinctly: &#8220;We like projects that have a purpose and a vision. Something deeper than just keeping the rain off your head. We want to help clients find what is meaningful to them.&#8221;</p>



<p class="wp-block-paragraph">That approach has produced strong results across multiple sectors. In healthcare, the firm has designed all four completed phases of the Huntsman Cancer Institute (HCI) at the University of Utah in Salt Lake City. The most recent phase—a 230,000-square-foot, $100-million research and office facility—exemplifies the firm&#8217;s patient-centered design thinking. Ben Tanner, executive director of the HCI, credits Architectural Nexus with understanding the unique needs of oncology patients.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&#8220;Their thoughtful work shows up in our patient satisfaction surveys. Patients always have great things to say about the look and feel of our buildings, and it&#8217;s a wonderful place for our clinical and research staff as well.&#8221;</p><cite>— Ben Tanner, Executive Director, Huntsman Cancer Institute</cite></blockquote>



<p class="wp-block-paragraph">A fifth phase of the HCI project was underway at the time of the award. The firm also completed a $114-million hospital in Nampa, Idaho, for the St. Luke&#8217;s Health System, which opened in fall 2017. Sandee Gehrke, vice president of operations at St. Luke&#8217;s, praised Architectural Nexus for investing time to understand the organization&#8217;s culture and brand identity before putting pen to paper.</p>



<p class="wp-block-paragraph">Beyond healthcare, the firm&#8217;s Salt Lake City portfolio includes the $160-million, 400,000-square-foot Hardware Village apartment and condominium complex and a $7-million, 48,000-square-foot mixed-use residential and retail building in the city&#8217;s 9th and 9th district. In higher education, the firm completed the College Activities Center at Gillette College in Gillette, Wyoming, which features a 2,100-seat basketball arena, athlete support facilities, and flexible multi-use space.</p>



<p class="wp-block-paragraph">Multiple LEED-certified designers work alongside specialists in landscape design, energy analysis, interior design, animation and visualization, and graphic design. Kingston notes that housing all these disciplines under one roof enables the firm to pursue both large, complex commissions and smaller experimental projects that push the boundaries of new technology and construction techniques.</p>



<h2 class="wp-block-heading">Employee Ownership as a Cultural Cornerstone</h2>



<p class="wp-block-paragraph">Architectural Nexus was in the process of completing an Employee Stock Ownership Plan (ESOP) in 2019. For Kingston, what began as a leadership-transition and financial planning tool evolved into a genuine expression of the firm&#8217;s values.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&#8220;In 2014 we really had a change in mindset, and the ESOP went from being a financial tool to a culture tool, a way to align with the values of the firm&#8230; One of our partners said at one point, &#8216;What is more Nexus than an ESOP?&#8217; and it just hit me that he was right.&#8221;</p><cite>— Kenner Kingston, President, Architectural Nexus</cite></blockquote>



<p class="wp-block-paragraph">Julie Berreth, vice president of operations, describes the firm&#8217;s internal culture as deliberately flat—characterized by a compressed compensation structure, a commitment to paying employees a living wage, and an extensive mentoring program designed to develop the next generation of architects and designers. The firm also joined the International Living Future Institute&#8217;s (ILFI) JUST program, which provides guidelines and external auditing on social justice and diversity performance.</p>



<p class="wp-block-paragraph">To translate these values into direct community impact, Architectural Nexus launched the Nexus Builds program approximately two years prior to receiving the award. The initiative has partnered with the Seattle-based Block program to design and build tiny off-the-grid homes for people experiencing homelessness on donated urban lots. At the time of the award, employees were constructing a tiny home in a corner of the firm&#8217;s Salt Lake City headquarters parking lot, scheduled for delivery to Seattle. Director of communications Brian Cassil described the project as meaningful beyond simple volunteerism: &#8220;This is very purpose driven, but at its core it is also about mastery and how to get better at what we do.&#8221;</p>



<h2 class="wp-block-heading">Beyond Conservation: Embracing Regenerative Design</h2>



<p class="wp-block-paragraph">Architectural Nexus has been an early advocate of sustainable design in the Intermountain region. In 2010, its Salt Lake City office became one of the first LEED Platinum certified buildings in the area. But the firm&#8217;s ambitions have since moved well beyond conventional green building metrics.</p>



<p class="wp-block-paragraph">The clearest expression of this trajectory is the firm&#8217;s Sacramento office, a renovated office and warehouse building that opened in 2016 in the city&#8217;s historic district. The project was designed in accordance with the International Living Future Institute&#8217;s Living Building Challenge (LBC)—one of the most rigorous sustainability frameworks in the built environment industry. The completed building features a composting system, onsite agriculture, onsite water filtration and treatment, highly efficient electrical systems, and a solar photovoltaic array. It achieved LEED Platinum certification (level four) and was recognized in 2018 as the first Living Building in California and the 19th in the world certified by ILFI.</p>



<p class="wp-block-paragraph">Berreth frames the firm&#8217;s design philosophy as anticipatory rather than reactive: &#8220;We don&#8217;t want to look at a building stuck on a site, but how it enhances the wider community and the people around it. Even if we are not putting something like PV panels on a project today, we want to anticipate they might be added one day and design space for them.&#8221;</p>



<p class="wp-block-paragraph">Kingston sees regenerative design—which seeks to restore the built environment to a more natural state, treating buildings as habitats rather than machines—as the logical next phase for the industry and the firm&#8217;s greatest strategic opportunity.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&#8220;For a long time, most firms in our industry have been climbing this mountain called sustainability. Some of us who were lucky got to the top and looked across to see what was next, and we saw regenerative design, things like the Living Building Challenge&#8230; I&#8217;m excited for the next five years because I think we are perfectly positioned for oncoming growth in regenerative design.&#8221;</p><cite>— Kenner Kingston, President, Architectural Nexus</cite></blockquote>



<p class="wp-block-paragraph">From rainwater systems for low-income desert housing to one of California&#8217;s most advanced Living Buildings, Architectural Nexus continues to demonstrate that people-centered architecture and environmental responsibility are not competing priorities—they are the same goal expressed at different scales.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/architectural-nexus-selected-as-2019-intermountain-design-firm-of-the-year/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Five Common DevOps Mistakes (and How to Avoid Them)</title>
		<link>https://www.bestdevops.com/there-are-five-biggest-devops-mistakes-you-must-need-to-avoid/</link>
					<comments>https://www.bestdevops.com/there-are-five-biggest-devops-mistakes-you-must-need-to-avoid/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Sat, 19 May 2018 05:27:29 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[DevOps Experts]]></category>
		<category><![CDATA[DevOps Mistakes]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=3736</guid>

					<description><![CDATA[Adopting DevOps is more than a technology shift — it requires careful planning, cross-team alignment, and realistic assessments of skill and capacity. Here are five mistakes organisations repeatedly make when transitioning to DevOps, and what to do instead.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Adopting DevOps sounds straightforward in theory, but in practice many organisations stumble in predictable ways. Whether it is rushing the transition, ignoring team capacity, or chasing the latest tooling, these missteps can undermine even the best-intentioned DevOps programmes. The five pitfalls below represent patterns commonly observed across organisations at various stages of DevOps maturity.</p>



<h2 class="wp-block-heading">1. Ignoring Staffing and Workload Capacity</h2>



<p class="wp-block-paragraph">One of the earliest and most damaging mistakes is pushing a DevOps transformation on a team that is already stretched thin. Before introducing new processes, toolchains, or responsibilities, engineering leaders need an honest picture of current workloads and individual capacity.</p>



<p class="wp-block-paragraph">Practical steps to avoid this mistake:</p>



<ul class="wp-block-list">
<li><strong>Audit existing workloads</strong> — map what each team member is currently responsible for before layering on DevOps duties.</li>
<li><strong>Define clear KPIs</strong> — establish key performance indicators so progress is measurable and team health is visible.</li>
<li><strong>Balance responsibilities deliberately</strong> — use workload data to redistribute tasks fairly rather than defaulting to whoever volunteers or whoever is most senior.</li>
</ul>



<p class="wp-block-paragraph">Neglecting capacity planning leads to burnout, high attrition, and a DevOps rollout that stalls because the people driving it are exhausted or actively looking for other jobs.</p>



<h2 class="wp-block-heading">2. Transitioning Without Adequate Planning</h2>



<p class="wp-block-paragraph">Competitive pressure can push organisations to announce a DevOps initiative before they are genuinely ready. The result is often engineers assigned to DevOps roles without the required depth of expertise, or small teams taking on complex projects to differentiate from competitors — only to deliver poor-quality outcomes.</p>



<p class="wp-block-paragraph">A well-planned DevOps transition should include:</p>



<ul class="wp-block-list">
<li><strong>Skills assessment</strong> — honestly evaluate the current expertise of everyone involved, not just their job titles.</li>
<li><strong>A phased roadmap</strong> — break the transition into stages with clear milestones rather than attempting a big-bang cutover.</li>
<li><strong>Training investment</strong> — identify skills gaps early and budget time and money to close them before those gaps become production problems.</li>
<li><strong>Realistic timelines</strong> — do not let competitive anxiety compress planning phases. A rushed plan tends to cost more time in rework than a careful one.</li>
</ul>



<h2 class="wp-block-heading">3. Prioritising Speed Over Quality</h2>



<p class="wp-block-paragraph">DevOps is strongly associated with delivery speed — shorter release cycles, faster feedback loops, and continuous deployment pipelines. This creates a tempting but dangerous assumption: that speed is the primary goal and quality is something to negotiate away when timelines are tight.</p>



<p class="wp-block-paragraph">In reality, sustainable DevOps practices treat speed and quality as complementary, not competing. Automated testing, peer code review, and continuous integration exist precisely to maintain quality <em>while</em> moving fast. Skipping these in the name of speed typically produces:</p>



<ul class="wp-block-list">
<li>Higher defect rates that slow teams down later through incident response and hotfixes.</li>
<li>Technical debt that compounds over time and eventually makes further acceleration impossible.</li>
<li>Customer trust issues that are far more costly to recover from than a slightly delayed release.</li>
</ul>



<p class="wp-block-paragraph">The principle to internalise is that well-implemented automation — not corner-cutting — is what enables both speed and quality simultaneously.</p>



<h2 class="wp-block-heading">4. Adopting New Technology Before Mastering the Current Stack</h2>



<p class="wp-block-paragraph">The DevOps tooling ecosystem evolves rapidly. New platforms, frameworks, and plugins appear constantly, and there is ongoing pressure to adopt whatever is trending — sometimes even tools that are still in beta — because competitors appear to be using them.</p>



<p class="wp-block-paragraph">This approach introduces unnecessary risk. Before migrating to a new technology:</p>



<ul class="wp-block-list">
<li><strong>Fully understand what you are replacing</strong> — know the current tool&#8217;s limitations, not just its shortcomings. Understand <em>why</em> you are switching.</li>
<li><strong>Evaluate maturity</strong> — a tool in beta carries integration and stability risks that may not be appropriate for production workloads.</li>
<li><strong>Stage your adoption</strong> — run new tooling in a lower environment first, measure the outcomes, and only promote to production when confidence is high.</li>
<li><strong>Avoid FOMO-driven decisions</strong> — the fact that a competitor is using a particular technology is not sufficient justification on its own.</li>
</ul>



<p class="wp-block-paragraph">Technology decisions should be driven by documented requirements and evaluated trade-offs, not by announcements at the most recent conference.</p>



<h2 class="wp-block-heading">5. Failing to Get Buy-in From All Stakeholders</h2>



<p class="wp-block-paragraph">DevOps is not solely an engineering initiative. At its core, it is a cultural and organisational shift that bridges development, operations, security, product, and — in many cases — leadership. One of the most common failure modes is treating DevOps as something a single team implements in isolation, while other groups continue working in siloed ways.</p>



<p class="wp-block-paragraph">For a DevOps transformation to take hold:</p>



<ul class="wp-block-list">
<li><strong>Secure executive sponsorship early</strong> — without visible support from leadership, the cultural changes required will not happen.</li>
<li><strong>Involve all affected teams</strong> — development, operations, QA, security, and product teams all need to understand how their ways of working will change and why.</li>
<li><strong>Establish shared goals</strong> — teams that are measured on conflicting metrics (e.g., Dev rewarded for feature velocity, Ops rewarded for system stability) will naturally resist collaboration.</li>
<li><strong>Communicate changes proactively</strong> — developers introducing new features that affect the pipeline or infrastructure should communicate those changes to all stakeholders before deployment, not after.</li>
</ul>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">DevOps adoption fails most often not because the underlying principles are flawed, but because organisations underestimate the organisational, cultural, and planning effort required. The five mistakes above — underestimating capacity, planning poorly, sacrificing quality for speed, chasing immature tooling, and neglecting stakeholder alignment — are entirely avoidable with deliberate preparation and honest self-assessment.</p>



<p class="wp-block-paragraph">A phased, people-first approach will nearly always outperform a rapid, tool-first one in the long run. Take the time to plan well, invest in your team&#8217;s skills, and build the cross-functional trust that DevOps depends on.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/there-are-five-biggest-devops-mistakes-you-must-need-to-avoid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker Reference Architecture: Docker Datacenter Best Practices and Design Considerations</title>
		<link>https://www.bestdevops.com/docker-reference-architecture-docker-datacenter-best-practices-and-design-considerations/</link>
					<comments>https://www.bestdevops.com/docker-reference-architecture-docker-datacenter-best-practices-and-design-considerations/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Sat, 18 Feb 2017 09:10:51 +0000</pubDate>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[DevOps Best Practices]]></category>
		<category><![CDATA[DevOps Tools]]></category>
		<category><![CDATA[Application Containers]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Datacenter]]></category>
		<category><![CDATA[DDC]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=698</guid>

					<description><![CDATA[Source:- docker.com Introduction Docker Datacenter (DDC) is the enterprise container platform from Docker to be used across the entire software [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Source:- docker.com</p>
<p><strong>Introduction</strong><br />
<a href="http://www.scmgalaxy.com/courses/agenda/virtulization-and-container-tools/docker-training.html">Docker </a>Datacenter (DDC) is the enterprise container platform from Docker to be used across the entire software supply chain. It is a fully-integrated solution for container-based application development, deployment, and management. With integrated end-to-end security, DDC enables application portability by abstracting your infrastructure so that applications can move seamlessly from development to production.</p>
<p><strong>What You Will Learn</strong><br />
This reference architecture describes a standard, production-grade, Docker Datacenter deployment. It also details the components of DDC, how they work, how to automate deployments, how to manage users and teams, how to provide high availability for the platform, and how to manage the infrastructure.</p>
<p>Some environment-specific configuration details are not be provided. For instance, load balancers vary greatly between cloud platforms and on-premises infrastructure platform. For these types of components, general guidelines to environment-specific resources are provided.</p>
<p><strong>Understanding Docker Datacenter Components</strong><br />
From development to production, Docker Datacenter provides a seamless platform for containerized applications both on-premises and on the Cloud. It includes three components:</p>
<ul>
<li>Docker CS Engine, the commercially supported Docker Engine</li>
<li>Docker Trusted Registry (DTR), a resilient and secure image management repository</li>
<li>Universal Control Plane (UCP), the web-based, unified cluster and application management solution</li>
</ul>
<p>Together they provide an integrated solution with the following design goals:</p>
<ul>
<li>Agility — the Docker API is used to interface with the platform so that operational features do not slow down application delivery</li>
<li>Portability — the platform abstracts details of the infrastructure for applications</li>
<li>Control — the environment is secure by default, provides robust access control, and logging of all operations</li>
</ul>
<p>To achieve these goals the platform must be resilient and highly available. This reference architecture demonstrates this robust configuration.</p>
<p><strong>Docker CS Engine</strong><br />
The building block of Docker Datacenter, the <a href="http://www.scmgalaxy.com/courses/agenda/virtulization-and-container-tools/docker-training.html">Docker </a>Commercially Supported Engine (CS Engine) is responsible for container-level operations, interaction with the OS, providing the Docker API, and running the Swarm cluster. The Engine is also the integration point for infrastructure, including the OS resources, networking, and storage.</p>
<p><strong>Universal Control Plane</strong><br />
UCP extends CS Engine by providing an integrated application management platform. It is both the main interaction point for users and the integration point for applications. UCP runs an agent on all nodes in the cluster to monitor them and a set of services on the controller nodes. This includes identity services to manage users, Certificate Authorities (CA) for user and cluster PKI, the main controller providing the Web UI and API, data stores for UCP state, and a Classic Swarm service for backward compatibility.</p>
<p><strong>Docker Trusted Registry</strong><br />
The DTR is an application managed by, and integrated with UCP, that provides Docker images distribution and security services. The DTR uses UCP&#8217;s identity services to provide Single Sign-On (SSO), and establish a mutual trust to integrate with its PKI. It runs as a set of services on one or several replicas: the registry to store and distribute images, an image signing service, a Web UI, an API, and data stores for image metadata and DTR state.</p>
<p><strong>Swarm Mode</strong><br />
To provide a seamless cluster based on a number of nodes, DDC relies on CS Engine&#8217;s Swarm-mode capability. Swarm-mode divides nodes between workers, nodes running application workloads defined as services, and managers, nodes in charge of maintaining desired state, managing the cluster&#8217;s internal PKI, and providing an API. Managers can also run workloads, in a DDC environment they run UCP controllers, and shouldn&#8217;t run anything else.</p>
<p>The Swarm-mode service model provides a declarative desired state for workloads, scalable to a number of tasks (the service&#8217;s containers), accessible through a stable resolvable name, and optionally exposing an end-point. Exposed services are accessible from any node on a cluster-wide reserved port, reaching tasks through the routing mesh, a fast routing layer using high-performance switching in the Linux Kernel. This set of features enable internal and external discoverability for services, UCP&#8217;s HTTP Routing Mesh (HRM) adding hostname-to-service mapping.</p>
<p><strong>A Standard Deployment Architecture</strong><br />
This section demonstrates a standard, production-level architecture for Docker Datacenter using 10 nodes: 3 UCP controllers, 3 nodes for the DTR, and 4 worker nodes for application workloads. The number of worker nodes is arbitrary, most environments will have more depending on applications needs, it doesn&#8217;t change the architecture or the cluster configuration.</p>
<p>Access to the environment is done through 3 Load Balancers (or 3 load balancer virtual hosts) with corresponding DNS entries for the UCP controllers, the DTR replicas, and the applications running in the cluster.</p>
<p>The DTR replicas use shared storage for images. S3-compatible object storage (the default) and NFS storage are both covered in this section</p>
<p><img fetchpriority="high" decoding="async" class="alignnone  wp-image-699" src="http://www.bestdevops.com/wp-content/uploads/2017/02/docker-api-ucp-300x151.png" alt="" width="483" height="243" srcset="https://www.bestdevops.com/wp-content/uploads/2017/02/docker-api-ucp-300x151.png 300w, https://www.bestdevops.com/wp-content/uploads/2017/02/docker-api-ucp-768x388.png 768w, https://www.bestdevops.com/wp-content/uploads/2017/02/docker-api-ucp-1024x517.png 1024w, https://www.bestdevops.com/wp-content/uploads/2017/02/docker-api-ucp.png 1625w" sizes="(max-width: 483px) 100vw, 483px" /></p>
<p><strong>Node Size</strong><br />
A node is a machine in the cluster (virtual or physical) with Docker Engine running on it. When provisioning each node, assign it a role: UCP Controller, DTR, or worker node so that they are protected from running application workloads.</p>
<p>To decide what size the node should be in terms of CPU, RAM, and storage resources, consider the following:</p>
<ol>
<li>All nodes should at least fulfil the minimal requirements, for UCP 2.0 2GB of RAM and 3GB of storage. More detailed requirements are in the UCP documentation.</li>
<li>UCP Controller nodes should be provided with more than the minimal requirements, but won&#8217;t need much more if nothing else runs on them.</li>
<li>Ideal Worker nodes size will vary based on your workloads, it is impossible to define a universal standard size.</li>
<li>Other considerations like target density (average number of container per node), wether one standard node type or several are preferred, and other operational considerations might also influence sizing.</li>
</ol>
<p>If possible, node size should be determined by experimentation and testing actual workloads, and they should be refined iteratively. A good starting point is to select a standard or default machine type in your environment and use this size only. If your standard machine type provides more resources than the UCP Controllers need, it makes sense to have a smaller node size for these. Whatever the starting choice, it&#8217;s important to monitoring resource usage and cost to improve the model.</p>
<p>Two example scenarios:</p>
<ul>
<li>One standard node size: 2VCPU, 8GB RAM, 20GB storage</li>
<li>Two node sizes: 2VCPU, 8GB RAM, 20GB storage for UCP Controllers and 4VCPU, 64GB RAM, 40GB storage for worker nodes</li>
</ul>
<p>Depending on your OS of choice, storage configuration for Docker Engine might require some planning. Refer to the Support Matrix to see what storage drivers are supported for your host OS. This is especially important if you are using RHEL or CentOS, which use device mapper with direct-lvm.</p>
<p class="editable"><strong>Load Balancers</strong></p>
<p>Load balancers configuration should be done before installation, including the creation of DNS entries. Most load balancers should work with DDC. The only requirements are TCP passthrough and the ability to do healthchecks on an HTTPS endpoint.</p>
<p>In our example architecture, UCP controllers ensure UCP resiliency in case of node failure or controller reconfiguration. Access to UCP through the GUI or API is always done using TLS. The load balancer is configured for simple TCP pass-through on port 443, using a custom HTTPS health check at <code>https://&lt;ucp_controller&gt;/_ping</code>.</p>
<p>Be sure to create a DNS entry for the UCP host such as <code>ucp.example.com</code> and point to the load balancer.</p>
<p>The setup for the three DTR replicas is similar to setting up the UCP controllers. Again, use TCP pass-through to port 443 on the nodes, except the health check is at <code>https://&lt;dtr_replica_node&gt;/health</code>.</p>
<p>Create a DNS entry for the DTR host such as <code>dtr.example.com</code> and point it to the load balancer. It&#8217;s important to keep it as concise as possible because it will be part of the full name of images. For example, <code>user_a</code>&#8216;s <code>webserver</code> image will be named <code>dtr.example.com/user_a/webserver</code>.</p>
<p>The application load balancer provides access to services HTTP endpoints exposed through UCP&#8217;s HTTP Routing Mesh (HRM). HRM provides a reverse-proxy to map domain names to services that expose ports and are attached to the <code>ucp-hrm</code> overlay network. As an example, the <code>voting</code> application exposes the <code>vote</code> service&#8217;s port <code>80</code>. The HRM maps <code>http://vote.apps.example.com</code> to this port on the <code>ucp-hrm</code> overlay network, and the application LB itself maps <code>*.apps.example.com</code> to nodes in the cluster.</p>
<p><strong>DTR Storage</strong><br />
The DTR usually needs to store a large number of images. It uses external storage (S3, NFS, etc.), not node storage so that it can be shared between DTR replicas. The DTR replicates metadata and configuration information between replicas, but not image layers themselves. To determine storage size, start with the size of the existing images used in the environment and evolve from there.</p>
<p>It&#8217;s best to use an existing storage solution in your environment so that image storage can benefit from existing operations experience. If you have to chose a new solution, consider using S3-compatible object storage, which maps more closely to registry operations.</p>
<p><strong>Recommendations for the Docker Datacenter Installation</strong><br />
This section will detail the installation process for the architecture and provide a checklist. It is not a substitute for the documentation, which provides more details and is authoritative in any case. The goal is to help you define a repeatable (and ideally automated) process to deploy, configure, upgrade and expand your DDC environment.</p>
<p>The three main stages of a DDC installation are:</p>
<ol>
<li>Deploying and configuring the infrastructure (hosts, network, storage).</li>
<li>Installing and configuring the Docker Engine, running as an application on the hosts.</li>
<li>Installing and configuring UCP and the DTR, delivered as containers running on the engine.</li>
</ol>
<p><strong>Infrastructure Considerations</strong><br />
The installation documentation details infrastructure requirements for DDC. It is recommended to use existing or platform specific tools in your environment to provide standardized and repeatable configuration for infrastructure components.</p>
<div id="section_12" class="mt-page-section">
<div id="section_13" class="mt-page-section">
<div id="section_15" class="mt-page-section">
<h4 class="editable">Firewall</h4>
<p>Access to DDC is done using port 443 only (ports 443 and 80 for DTR), whether it&#8217;s to access the Web UI or the remote API. This makes external firewall configuration simple. In most cases you only need to open ports 80, 443, and 22. Port 22 is for SSH access is is optional since DDC doesn&#8217;t require SSH access. Access to applications is through a load balancer using HTTPS. If you expose other TCP services to the outside world, open these ports on the firewall. As explained in the previous section, several ports need to be open for communication inside the cluster. If you have a firewall between some nodes in the cluster, for example, to separate controllers from worker nodes, open the relevant port there too.</p>
<p><img decoding="async" class="internal" src="https://success.docker.com/@api/deki/files/358/DDC_Ports.png?revision=1" alt="DDC Ports" /></p>
</div>
<div id="section_16" class="mt-page-section"><span id="Load_Balancers_2"></span></p>
<h4 class="editable">Load Balancers</h4>
<p>Load balancers are detailed in the previous section. They must be in place before installation and must be provisioned with the right hostnames. External (load balancer) hostnames are used for HA and also for TLS certificates. It&#8217;s easier not having to reconfigure them during or after installation.</p>
<p>Refer to the previous section DDC Components for details about load balancer configuration.</p>
</div>
<div id="section_17" class="mt-page-section"><span id="Shared_Storage"></span></p>
<h4 class="editable">Shared Storage</h4>
<p>DTR shared storage, used for images in the registry, must be ready and accessible from the DTR nodes. Test it works using an S3 or NFS command line client to avoid having to debug DTR storage configuration.</p>
</div>
<div id="section_18" class="mt-page-section"><span id="Host_Configuration"></span></p>
<h4 class="editable">Host Configuration</h4>
<p>Host configuration varies based on the OS used and existing configuration standards, but there are some important steps that must be followed after OS installation:</p>
<ol>
<li><strong>Clock synchronization</strong> using NTP or similar service. Clock skew can produce hard to debug errors, especially where the Raft algorithm is used (UCP and the DTR).</li>
<li><strong>Static IPs</strong> are required for UCP for all hosts.</li>
<li><strong>Hostnames</strong> are used for node identification in the cluster. The hostname must be set in an non-ephemeral way.</li>
<li><strong>Host firewalls</strong> must allow intra-cluster traffic on all the ports specified in the installation docs.</li>
<li><strong>Storage</strong> must be configured if needed. For example, the <code>devicemapper</code> driver need a logical volume configured before Docker Engine installation.</li>
</ol>
</div>
</div>
<div id="section_19" class="mt-page-section"><span id="Docker_CS_Engine_Installation_Considerations"></span></p>
<h3 class="editable">Docker CS Engine Installation Considerations</h3>
<p>Detailed installation instructions for CS Engine are provided by the documentation. To install on machines that don&#8217;t have Internet access, add these package to your own private repository. After installing the package, make sure the <code>docker</code> service is configured to start on system boot.</p>
<p>The best way to change parameters for CS Engine is to use the <code>/etc/docker/daemon.json</code> configuration file. This ensures that the configuration can be reused across different systems and OS in a consistent way. See the documentation for <a class="link-https" href="https://docs.docker.com/engine/reference/commandline/dockerd/#/daemon-configuration-file" target="_blank" rel="external nofollow noopener">the full list of options</a>.</p>
<p>Make sure Engine is configured correctly by starting the <code>docker</code> service and verifying the parameters with <code>docker info</code>.</p>
</div>
<div id="section_20" class="mt-page-section"><span id="UCP_Installation_Considerations"></span></p>
<h3 class="editable">UCP Installation Considerations</h3>
<p>The UCP installer creates a functional cluster from a set of machines running CS Engine. That includes creating a Swarm cluster and installing the UCP controllers. The default installation mode as described in the <a class="link-https" href="https://docs.docker.com/datacenter/ucp/2.0/guides/installation/#/step-4-install-ucp" target="_blank" rel="external nofollow noopener">Installation Guide</a> is interactive.</p>
<p>To perform fully-automated, repeatable deployments, provide more information to the installer:</p>
<pre><code>docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp/docker_subscription.lic:/config/docker_subscription.lic \
  -e UCP_ADMIN_PASSWORD=password --name ucp docker/ucp install --host-address IP_or_interface \
  --san manager1.example.com --san ucp.example.com 
</code></pre>
<p>Each of these options are explained in the following sections.</p>
<div id="section_21" class="mt-page-section"><span id="External_Certificates"></span></p>
<h4 class="editable">External Certificates</h4>
<p>By default UCP uses self-signed TLS certificates. For production deployments, it is recommended to use certificates generated by a trusted CA. In most cases, this is your organization&#8217;s internal CA.</p>
<p>The certificates and keys needed as follows:</p>
<ol>
<li>The root CA&#8217;s public certificate <code>ca.pem</code>.</li>
<li>The TLS certificate <code>cert.pem</code>. It must also include the public certificates of any intermediate CA and have SANs for all addresses used to access UCP, including the load balancer&#8217;s hostname (e.g. <code>ucp.example.com</code>) and the individual controllers&#8217; hostnames (e.g. <code>ucp-controller1.example.com</code>) to access them directly.</li>
<li>The TLS private key, <code>key.pem</code>.</li>
</ol>
<p>To add these automatically during installation, add these files with the exact names to a volume named <code>ucp-controller-server-certs</code> on the machine where you install UCP, and use the <code>--external-server-cert</code> install parameter.</p>
<p>It is also possible to add the certificates through the Web UI after installation.</p>
</div>
<div id="section_22" class="mt-page-section"><span id="License_File"></span></p>
<h4 class="editable">License File</h4>
<p>The license file can be provided for installation via the command line as well using a bind-mount (volume) in <code>/config</code>. Specify its location with <code>-v /path/to/docker_subscription.lic:/config/docker_subscription.lic</code>.</p>
</div>
<div id="section_23" class="mt-page-section"><span id="Admin_Password"></span></p>
<h4 class="editable">Admin Password</h4>
<p>To make the installation entirely non-interactive, the admin password must be passed using the <code>--admin-password</code> install parameter. The admin username is <code>admin</code> by default. Use <code>--admin-username</code> to change it.</p>
</div>
<div id="section_24" class="mt-page-section"><span id="Adding_Nodes"></span></p>
<h4 class="editable">Adding Nodes</h4>
<p>Once the installation has finished for the first controller node, the two additional controllers must be installed by joining them to the cluster. UCP configures a full controller replica on the manager node in the cluster, so the only command needed on the two controllers is a <code>docker swarm join</code> with the right token. The exact command can be obtained by running <code>docker swarm join-token manager</code> on the first controller.</p>
<p>To join the worker nodes, the equivalent command can be obtained with <code>docker swarm join-token worker</code> on any controller:</p>
<pre><code>docker swarm join-token worker
</code></pre>
<p>To add a worker to this swarm, run the following command:</p>
<pre><code>docker swarm join \
--token SWMTKN-1-00gqkzjo07dxcxb53qs4brml51vm6ca2e8fjnd6dds8lyn9ng1-092vhgjxz3jixvjf081sdge3p \
192.168.65.2:2377
</code></pre>
<p>To make sure everything is running correctly, log into UCP at <code>https://ucp.example.com</code>.</p>
</div>
</div>
<div id="section_25" class="mt-page-section"><span id="DTR_Installation_Considerations"></span></p>
<h3 class="editable">DTR Installation Considerations</h3>
<p>Installation of the DTR is similar to that of UCP. Install and configure one node, and then join replicas to form a full, highly-available setup. For installation of the first instance as well as replicas, point the installer to the node in the cluster it will install on.</p>
<p>Certificates and image storage must be configured after installation. Once shared storage is configured, the two replicas can be added with the <code>join</code> command.</p>
</div>
<div id="section_26" class="mt-page-section"><span id="Validating_the_Deployment"></span></p>
<h3 class="editable">Validating the Deployment</h3>
<p>When installation of everything has finished, tests can be done to validate the deployment. Disable scheduling of workloads on UCP controllers and nodes running the DTR.</p>
<p>Basic tests to consider:</p>
<ol>
<li>Log in through <code>https://ucp.example.com</code> as well as directly to a manager node, eg. <code>https://manager1.example.com</code>. Make sure the cluster and all nodes are healthy.</li>
<li>Test that you can deploy an application following <a class="link-https" href="https://docs.docker.com/datacenter/ucp/2.0/guides/applications/" target="_blank" rel="external nofollow noopener">the example in the documentation</a>.</li>
<li>Test that users can download a bundle and connect to the cluster from the CLI. Test that they can use docker-compose.</li>
<li>Test DTR with a full image workflow. Make sure storage isn&#8217;t misconfigured and images are stored in the right place.</li>
</ol>
<p>Consider building a standard automated test suite to validate new environments and updates. Just testing standard functionality should hit most configuration issues. Make sure you run these tests with a non-admin user, the test user should have similar rights as users of the platform. Measuring time taken by each test can also pinpoint issues with underlying infrastructure configuration. Fully deploying an actual application from your organization should be part of this test suite.</p>
</div>
</div>
<div id="section_27" class="mt-page-section"><span id="High_Availability_in_DDC"></span></p>
<h2 class="editable">High Availability in DDC</h2>
<p>In a production environment, it is vital that critical services have minimal downtime. It is important to understand how high availability (HA) is achieved in UCP and the DTR, and what to do to when it fails. UCP and DTR use the same principles to provide HA, but UCP is more directly tied to Swarm&#8217;s features. The general principle is to have core services replicated in a cluster, which allows another node to take over when one fails. Load balancers make that transparent to the user by providing a stable hostname, independent of the actual node processing the request. It&#8217;s the underlying clustering mechanism that provides HA.</p>
<div id="section_28" class="mt-page-section"><span id="Swarm"></span></p>
<h3 class="editable">Swarm</h3>
<p>The foundation of UCP HA is provided by Swarm, the clustering functionality of Docker Engine. As detailed in the Docker Engine documentation, there are two algorithms involved in managing a Swarm cluster: a Gossip protocol for worker nodes and the Raft consensus algorithm for managers. Gossip protocols are <em>eventually consistent</em>, which means that different parts of the cluster might have different versions of a value while new information spreads in the cluster (they are also called <em>epidemic protocols</em> because information spreads like a virus). This allows for very large scale cluster because it&#8217;s not necessary to wait for the whole cluster to agree on a value, while still allowing fast propagation of information to reach consistency in an acceptable time. Managers handle tasks that need to be based on highly consistent information because they need to make decisions based on global cluster and services state.</p>
<p>In practice, <em>high consistency</em> can be difficult to achieve without impeding availability because each write needs to be acknowledged by all participants, and a participant being unavailable or slow to respond will impact the whole cluster. This is explained by the CAP Theorem, which (to simplify) states that in the presence of partitions (P) in a distributed system, we have to chose between consistency (C) or availability (A). Consensus algorithms like Raft address this trade-off using a <em>quorum</em>: if a majority of participant agree on a value, it is good enough, the minority participant eventually get the new value. That means that a write needs only acknowledgement from 2 out of 3, 3 out of 5, or 4 out of 7 nodes.</p>
<p>Because of the way consensus works, an odd number of nodes is recommended when configuring Swarm. With 3 manager nodes in Swarm, the cluster can temporarily lose 1 and still have a functional cluster, with 5 you can lose 2, and so on. Conversely, you need 2 managers to acknowledge a write in a 3 manager cluster, but 3 with 5 managers, so more managers don&#8217;t provide more performance or scalability — you are actually replicating more data. Having 4 managers doesn&#8217;t add any benefits since you still can only lose 1 (majority is 3), and more data is replicated than with just 3. In practice, it is more fragile.</p>
<p>If you have 3 managers and lose 2, your cluster is non-functional. Existing services and containers keep running, but new requests are not processed. <strong>A single remaining manager in a cluster doesn&#8217;t &#8220;switch&#8221; to single manager mode. It is just a minority node.</strong> You also cannot just promote worker nodes to manager to regain quorum. The failed nodes are still members of the consensus group and need to come back online.</p>
</div>
<div id="section_29" class="mt-page-section"><span id="UCP"></span></p>
<h3 class="editable">UCP</h3>
<p>UCP runs a global service across all cluster nodes called <code>ucp-agent</code>. This agent installs a UCP controller on all Swarm manager nodes. There is a one-to-one correspondence between Swarm managers and UCP controllers, but they have different roles. Using its agent, UCP relies on Swarm for HA, but it also includes replicated data stores that rely on their own raft consensus groups that are distinct from Swarm: ucp-auth-store, a replicated database for identity management data, and ucp-kv, a replicated key-value store for UCP configuration data.</p>
</div>
<div id="section_30" class="mt-page-section"><span id="DTR"></span></p>
<h3 class="editable">DTR</h3>
<p>The DTR has a replication model that is similar to how UCP works, but it doesn&#8217;t synchronize with Swarm. It has one replicated component, its datastore, which might also have a lot of state to replicate at one time. It relies on raft consensus.</p>
<p>Both UCP controllers and DTR replicas may have a lot more state to replicate when (re)joining the cluster. Some reconfiguration operations can make a cluster member temporary unavailable. With 3 members, it&#8217;s good practice to wait for the one you reconfigured to get back in sync before reconfiguring a second one, or they could lose quorum. Temporary losses in quorum are easily recoverable, but it still means the cluster is in an unhealthy state. Monitoring the state of controllers to ensure the cluster doesn&#8217;t stay in that state is critical.</p>
</div>
</div>
<div id="section_31" class="mt-page-section"><span id="Backup_and_Restore"></span></p>
<h2 class="editable">Backup and Restore</h2>
<p>The HA setup using multiple nodes works well to provide continuous availability in the case of temporary failure, including planned node downtime for maintenance. For other cases, including the loss of the full cluster, permanent loss of quorum, and data loss due to storage faults, restoring from backup is necessary.</p>
<div id="section_32" class="mt-page-section"><span id="UCP_Backup"></span></p>
<h3 class="editable">UCP Backup</h3>
<p>UCP backup is done using the <code>docker/ucp backup</code> command on a controller node. It stops the UCP containers on the node and perform a full backup of the configuration and state of UCP. Some of this information is sensitive, so you should always use the <code>--passphrase</code> option to encrypt the backup. The backup also includes the orgs, teams, and users used by DTR as well as UCP. Regular backups should be scheduled. Here is an example showing how to run the command without user input:</p>
<pre><code>UCPID=$(docker run --rm -i --name ucp -v /var/run/docker.sock:/var/run/docker.sock docker/ucp id)
docker run --rm -i --name ucp -v /var/run/docker.sock:/var/run/docker.sock docker/ucp backup --id $UCPID --passphrase "secret" &gt; /tmp/backup.tar
</code></pre>
<p>There are two ways to use the backup:</p>
<ul>
<li>To restore a controller using the <code>docker/ucp restore</code> command (only the backup from that controller can be used)</li>
<li>To install a new cluster using the <code>docker/ucp install --from-backup</code> command (preserves users and configuration)</li>
</ul>
</div>
<div id="section_33" class="mt-page-section"><span id="DTR_Backup"></span></p>
<h3 class="editable">DTR Backup</h3>
<p>A DTR backup includes configuration information, images metadata, and certificates. Images themselves need to be backed up separately directly from storage. Remember that users and organizations are managed and backed up by UCP.</p>
<p>The backup can only be used to create a new DTR, using the <code>docker/dtr restore</code> command.</p>
</div>
</div>
<div id="section_34" class="mt-page-section"><span id="Identity_Management"></span></p>
<h2 class="editable">Identity Management</h2>
<p>Accessing resources (images, containers, volumes, networks etc) and functionality within the components of DDC (UCP &amp; DTR) require at a minimum, an account and a corresponding password to be accessed. Accounts within DDC are identities stored within an internal database, but the source of creating those accounts and the associated access control can be manual (managed or internal) or external through a connection to a directory server (LDAP) or Active Directory (AD). Managing the authorization for these accounts is an extension of coarse and fine grained permissions that are described in the sections below.</p>
<div id="section_35" class="mt-page-section"><span id="Managed_(Internal)_Authentication"></span></p>
<h3 class="editable">Managed (Internal) Authentication</h3>
<p>Managed mode of authentication and authorization is the default mode in DDC. In this mode, accounts are directly created using the DDC API. User accounts can be created manually by accessing the <strong>User Management —&gt; Create User</strong> form in the UCP US. Accounts can also be created and managed in an automated fashion by making HTTP requests to the authentication and authorization RESTful service known as eNZi.</p>
<p>User management using the &#8220;Managed&#8221; mode is recommended only for demo purposes or where the number of users needing to access DDC is very small.</p>
<p>Pros:</p>
<ul>
<li>Easy and quick to setup &#8211; Simple to troubleshoot</li>
<li>Appropriate for a small set of users with static roles</li>
<li>Managed without leaving the UCP interface</li>
</ul>
<p>Cons:</p>
<ul>
<li>User Account management gets cumbersome for larger numbers or when roles need to be managed for several applications.</li>
<li>All lifecycle changes such as adding / removing permissions of users need to be accomplished manually user by user.</li>
<li>Users must be deleted manually, meaning access may not get cleaned up quickly, making the system less secure.</li>
<li>Sophisticated setups of integrating application creation and deployment through LDAP or external systems is not possible.</li>
</ul>
</div>
<div id="section_36" class="mt-page-section"><span id="LDAP_.2F_AD_Integration"></span></p>
<h3 class="editable">LDAP / AD Integration</h3>
<p>The LDAP method of user account authentication can be turned on to manage user access. As the name suggests, this mode enables automatically synchronization of user accounts from a directory server such as Active Directory or OpenLDAP.</p>
<p>This method is particularly applicable for enterprise use cases where organizations have a large set of users, typically maintained in a centralized identity store that manages both authentication and authorization. Most of these stores are based on a directory server such as Microsoft&#8217;s Active Directory or a system that supports the LDAP protocol. Additionally, such enterprises already have mature processes for on-boarding, off-boarding, and managing the lifecycle of changes to user and system accounts. All these can be leveraged to provide a seamless and efficient process of access control within DDC.</p>
<p>Pros:</p>
<ul>
<li>Ability to leverage already established access control processes to grant and revoke permissions.</li>
<li>Ability to continue managing users and permissions from a centralized system based on LDAP.</li>
<li>Increased security due to self-cleaning nature of this mode, where non-existent LDAP users are automatically removed from DDC on the next sync.</li>
<li>Ability to configure complex upstream systems such as flat files, database tables using an LDAP proxy, and the automatic time-based de-provisioning of access through AD/LDAP groups.</li>
</ul>
<p>Cons:</p>
<ul>
<li>Increased complexity compared to Managed mode</li>
<li>Higher admin requirements since knowledge on an external system (LDAP) is needed</li>
<li>Greater time needed to troubleshoot issues with an extra components (LDAP) in the mix</li>
<li>Unexpected changes to DDC due to changes made to upstream LDAP/AD systems, which can have unexpected effects on DDC</li>
</ul>
<p>A recommended best practice is to use group membership to control access of users accounts to resources. Ideally, the management of such group membership is achieved through a centralized Identity Management or a Role Based Access Control system. This provides a standard, flexible, and scalable model to control the authentication and authorization rules within DDC through a centralized directory server. Through the Identity Management system, this directory server is kept in sync with user on-boarding, off-boarding, and changes in roles and responsibilities.</p>
<p>To change the mode of authentication, use the form at <strong>Admin Settings —&gt; Auth</strong> in the UCP UI. In this form, change the <strong>METHOD</strong> field under <strong>Authentication</strong> from the default value of <strong>Managed</strong> to <strong>LDAP</strong>.</p>
<p>Accounts that are discovered and subsequently synced from the directory server can be automatically assigned default permissions. It is recommended to leave the option for default permission to <strong>No Access</strong> Any necessary additional access can be granted based on group memberships.</p>
<p><img decoding="async" class="internal" src="https://success.docker.com/@api/deki/files/359/LDAP-configuration.png?revision=2" alt="Auth Configuration - LDAP" /></p>
<p>For details about the LDAP configuration options, read the Integrate with LDAP documentation.</p>
<p>This section highlights important configuration options to consider when setting up LDAP authentication.</p>
<p>In LDAP auth mode, when accounts are discovered and subsequently imported, all previously created accounts in a Managed mode including the admin accounts are deleted. A new admin account is created when authentication is switched to LDAP. This admin account is a local account and is intended to be useable independent of the LDAP settings (for example, in a situation when there is a loss of connectivity to the directory server). The details of this admin account can be set during the sync using <strong>RECOVERY ADMIN USERNAME</strong> and <strong>RECOVERY ADMIN PASSWORD</strong>.</p>
<p>A user account on the directory server has to be configured to discover and import accounts from the directory server. This user account need not be a very powerful account. In fact, it is recommended that it is a read-only account that can view the necessary organizationalUnits (<code>ou</code>) and query for group memberships. The details for this account are configured using the fields <strong>READER DN</strong> and <strong>READER PASSWORD</strong>. The <strong>READER DN</strong> must be in the distinguishedName format.</p>
<p>Use secure LDAP if at all possible.</p>
<p>Use the Test LDAP Connection section to make sure you can connect before switching to LDAP authentication.</p>
<p>Once the form is filled out and the test connection succeeds, the sync button provides an option to run a sync immediately without waiting for the next interval. Doing so initiates an LDAP connection and runs the filters to import the users. Any previously logged in user is logged out due to the disablement of all pre-existing accounts.</p>
<p><img decoding="async" class="internal" src="https://success.docker.com/@api/deki/files/360/LDAP-mode-deactivate-accounts.png?revision=2" alt="LDAP mode - Deactivate all existing accounts" /></p>
<p>After the sync is complete, it should be possible to log in using the recovery account and password. Be sure to test this recovery account. It should also be possible to log in using a sync-ed LDAP/AD account (the only supported attributes are <code>uid</code> and <code>sAMAccountName</code>) and its corresponding LDAP/AD password. The sync-ed account should be in good standing within the LDAP/AD system for the login to be successful within DDC.</p>
<p>The progress / status of the sync and any errors that occur can be viewed and analyzed on the controllers by running:</p>
<pre><code>docker logs ucp-controller
</code></pre>
</div>
<div id="section_37" class="mt-page-section"><span id="Teams"></span></p>
<h3 class="editable">Teams</h3>
<p>User accounts that exist within DDC, either through an LDAP sync or manually managed, can be organized into teams. Each team created can be assigned customized permissions and managed as a group of users as opposed to granting permissions to each user account on an individual basis.</p>
<p>Teams can be created in the UCP UI using the <strong>TEAMS +Create</strong> interface under <strong>User Management</strong>. The same can be accomplished by using the eNZi API that is described in a later section. Members can be added to the team one-by-one. An alternative method of adding members to a team can be employed if using the LDAP Auth mode. This is based on an automatic sync of discovered accounts from the directory server that was configured to enable the LDAP Auth mode. Finer filters can be applied here which determine which discovered accounts are placed into which teams. A team can have multiple users, and a user can be a member of zero to multiple teams.</p>
</div>
<div id="section_38" class="mt-page-section"><span id="RBAC_and_Managing_Team_Level_Access_to_Resources"></span></p>
<h3 class="editable">RBAC and Managing Team Level Access to Resources</h3>
<p>Permissions to resources through UCP are managed through default access levels. The default access permissions are <code>No Access</code>, <code>View Only</code>, <code>Restricted Control</code> and <code>Full Control</code>. Description about these permissions and how they relate to each other are detailed in the Reference Architecture Securing Docker Datacenter and Security Best Practices. These permissions can be further extended by adding the user accounts to specific teams. In other words, the default permissions assigned directly to a user provide a coarse-grained access control. The user should then be added to teams to attain higher granularity in what a user account can do on specific containers, images, and other resources. The teams are assigned attributes in the form of labels that provide additional flexibility through a fine-grained access control. In some ways this mimics a traditional Role Based Access Control (RBAC), where the teams are the roles assigned to user accounts, but there are specks of the finer Attribute Based Access Control (ABAC) through the assignment of one of more labels to each team, which ultimately define the level of access of the account to UCP resources.</p>
<p>While teams can be associated with as many labels as necessary, the resources within UCP like <code>services</code>, <code>images</code>, <code>volumes</code>, <code>networks</code>, and <code>secrets</code> can also be associated with any one of these labels to tie the two together. It should be noted that any labels assigned to a service are automatically inherited by the tasks which currently are container workloads. So this behaves in just the same way as assigning meta information in the form of labels to containers (or any other resource for that matter). Internally, the resources are assigned a label with the key <code>com.docker.ucp.access.label</code> with the value as specified.</p>
<p>It would be easier to understand with a concrete example as described in the following section.</p>
</div>
<div id="section_39" class="mt-page-section"><span id="Strategy_for_Using_LDAP_Filters"></span></p>
<h3 class="editable">Strategy for Using LDAP Filters</h3>
<p>This section demonstrates a typical use case that uses the principles of &#8220;least privilege / permission&#8221; as well as &#8220;separation of duties.&#8221;</p>
<p>Suppose you have a simple application called <code>www</code>, which is a web server based on the <code>nginx</code> official image. Say there are three teams that need access to this application — <code>developers</code>, <code>testers</code>, and <code>operations</code>. Typically, <code>testers</code> need <code>View Only</code> access and nothing further, while the <code>operations</code> team usually needs <code>Full Control</code>. The <code>developers</code> team needs access to troubleshoot, restart, and control the lifecycle of the application but should be forbidden from any other activity involving the need to access the host file systems, or starting up privileged containers. This type of special access is termed <code>Restricted Control</code>.</p>
<p>The users needing to access UCP are all sourced from the corporate Directory Server system. These users are the admin users needed to manage DDC infrastructure as well as all members of each of the teams configured within UCP. Also assume that the total universe of users needing access to DDC (includes admins, developers, testers and operations) is a subset of the gamut of users within the Directory Server.</p>
<p>A recommended strategy to use when organizing the DDC users is to create an overarching membership group that identifies all users of DDC irrespective of which team they are a part of. Let us call this group <code>DDC_Users</code>. No user should be made a member of this group directly. Instead, the <code>DDC_Users</code> group should have other groups in it and only groups as its members. Per our example, let us call these groups <code>dev</code>, <code>test</code>, and <code>ops</code>. In our example, these groups are part of what is known as a <em>nested group</em> structure within the directory server. Nested groups allow the inheritance of permissions from one group to each of its sub-groups.</p>
<blockquote><p>**NOTE:** Some directory servers do not support the feature of nested groups or even the `memberOf` attribute by default. If so, then they would need to be enabled. If the choice of directory server does not support these features at all, then alternate means of organizing users and querying them should be used. Microsoft Active Directory supports both these features out of the box.</p></blockquote>
<p>User accounts should be added as members of these sub-groups in the directory server. This should not impact any existing layout in the organization units or pre-existing group membership for these users.</p>
<p>Within UCP, the first step is to enable the LDAP Auth mode. Under <strong>User Search Configurations</strong>, for the <strong>FILTER</strong> field, the value based on our example above should be <code>(&amp;(objectClass=person)(memberOf=cn=DDC_Users,ou=groups,dc=example,dc=com))</code>.</p>
<p>Performing a sync with this setting discovers and import all users that are members of the group <code>DDC_Users</code> (through the nested sub-groups).</p>
<p>Next, using the <strong>TEAMS +Create</strong> link under <strong>User Management</strong>, the individual teams can be created. An example of creating the <code>developers</code> team is shown below. The value of the <strong>Group DN</strong> field reflects the sub-group created under <code>DDC_Users</code> called <code>dev</code>.</p>
<p><img decoding="async" class="internal" src="https://success.docker.com/@api/deki/files/361/developer-team-creation.png?revision=2" alt="Developers team creation" /></p>
<p>After the team is created, bring up the <strong>Add Label</strong> form by clicking on the <strong>PERMISSIONS</strong> link. Here, as many permissions as needed can be added. In the image below, two labels are added to denote that members of the <code>developers</code> team have <code>View Only</code> access to any resource labeled as <code>production</code>. An additional label grants the members of the <code>developers</code> team <code>Full Control</code> on resources labeled as <code>development</code>.</p>
<p><img decoding="async" class="internal" src="https://success.docker.com/@api/deki/files/362/developer-team-permissions.png?revision=2" alt="Developers permissions" /></p>
<p>Similarly, the <code>testers</code> and <code>operations</code> teams are created and assigned permissions per the table below:</p>
<table>
<thead>
<tr>
<th>Team</th>
<th>Group</th>
<th>Permissions</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>testers</code></td>
<td><code>cn=test,ou=groups,dc=example,dc=com</code></td>
<td><code>production</code>: <code>No Access</code></td>
</tr>
<tr>
<td></td>
<td></td>
<td><code>development</code>: <code>View Only</code></td>
</tr>
<tr>
<td><code>operations</code></td>
<td><code>cn=ops,ou=groups,dc=example,dc=com</code></td>
<td><code>production</code>: <code>Full Control</code></td>
</tr>
<tr>
<td></td>
<td></td>
<td><code>development</code>: <code>Full Control</code></td>
</tr>
</tbody>
</table>
<p>Now, you can create the service <code>www</code> and assign it the appropriate <code>access label</code> to allow only specific users access to the resource using a command like below:</p>
<pre><code>docker service create --name www -p 80:80 --label com.docker.ucp.access.label=development nginx
</code></pre>
<p>The same can be done in the UCP UI while creating a service by selecting an appropriate label (<code>development</code> in this example) from the <strong>PERMISSIONS LABEL</strong> dropdown as shown below. The label is applied to the service for enforcing role-based access control.</p>
<p><img decoding="async" class="internal" src="https://success.docker.com/@api/deki/files/363/service-create-permissions-label.png?revision=2" alt="Service create - Permissions Labels" /></p>
<p>Only those labels that the logged in user has access to shows up in the dropdown. An admin user or a user assigned <code>Full Control</code> permission is shown all available labels regardless of the labels assigned to the team of which the user is a member of.</p>
<p>Now, create another service <code>www-prod</code> similarly based on the <code>nginx</code> image but with the <strong>Permission Label</strong> of <code>production</code> applied to it while logged in as a user <code>boyle</code> who is a member of the developers team. His permissions look as follows:</p>
<p><img decoding="async" class="internal" src="https://success.docker.com/@api/deki/files/364/developers-member-profile.png?revision=3" alt="Developers - boyle profile" /></p>
<p>The account <code>boyle</code> can see both services, <code>www</code> and <code>www-prod</code>, but only the <code>www</code> service allows edits and other control because the permission label of <code>development</code> matches with the team&#8217;s resource label of <code>development</code> granted with <code>Full Control</code> permissions. The <code>www-prod</code> service forbids any edits using the account <code>boyle</code> because it has a permission label of <code>production</code>, which has been marked as <code>View Only</code> in the team <code>developers'</code> resource label. For example, if the account <code>boyle</code> was used to scale up the number of replicas of each service, from 1 to 2 (for instance), an error of <code>Access Denied</code> would be thrown for the <code>www-prod</code> service, while the same would work for <code>www</code> service.</p>
<p>Further, as evident in the profile image, <code>boyle</code> has <code>Default Permissions</code> of <code>No Access</code>. This prevents the <code>boyle</code> account from accessing any other resource unless the permission label and team resource label match and provide explicit permissions that override the <code>No Access</code> default permission.</p>
<p>Finally, if and when it becomes necessary to terminate all access for any user account, removing the group membership of the account from just the one group <code>DDC_Users</code> would remove all access for the user. Due to the nature of how nested groups work, all additional access within DDC is automatically cleaned — the user account is removed from any and all team memberships at the time of the next sync without need for manual intervention or additional steps. This step can be integrated into a standard on-boarding / off-boarding automated provisioning step within a corporate Identity Management system.</p>
</div>
<div id="section_40" class="mt-page-section"><span id="Authentication_API_(eNZi)"></span></p>
<h3 class="editable">Authentication API (eNZi)</h3>
<p>The AuthN API or eNZi (as it is known internally and pronounced N-Z) is a centralized authentication and authorization service and framework for DDC. This API is completely integrated and configured into DDC and works seamlessly with UCP as well as DTR. This is the component and service under the hood that manages accounts, teams and organizations, user sessions, permissions and access control through labels, Single-Sign-On (Web SSO) through OpenID Connect, and synchronization of account details from an external LDAP-based system into DDC.</p>
<p>For regular day-to-day activities, users and operators need not be concerned with the AuthN API and how it works, however its features can be leveraged to automate many common functions and/or bypass the DDC UI altogether to manage and manipulate the data directly.</p>
<p>The RESTFul AuthN API endpoints are documented in the AuthN API.</p>
<p>Interaction with AuthN can be accomplished in two ways: via the exposed RESTful AuthN API over HTTP or via the <code>enzi</code> command.</p>
<p>For example, the command below uses <code>curl</code> and <code>jq</code> to fetch all user accounts in <a href="http://www.scmgalaxy.com/courses/agenda/virtulization-and-container-tools/docker-training.html">DDC</a> via the AuthN API over HTTP:</p>
<pre><code>curl --silent --insecure --header "Authorization: Bearer $(curl --silent --insecure \
     --data '{"username":"&lt;admin-username&gt;","password":"&lt;admin-password&gt;"}' \
    https://&lt;UCP-domain-name&gt;/auth/login | jq --raw-output .auth_token)" \
    https://&lt;UCP-domain-name&gt;/enzi/v0/accounts | jq .
</code></pre>
<p>The AuthN service can also be invoked on the CLI on a UCP controller. To connect into it, run the following on a UCP controller:</p>
<pre><code>docker exec -it ucp-auth-api sh
</code></pre>
<p>At the resulting prompt (<code>#</code>), type the <code>enzi</code> command with a sub-command such as the one below to list the database table status:</p>
<pre><code>enzi db-status
</code></pre>
</div>
</div>
<h3 class="editable"></h3>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/docker-reference-architecture-docker-datacenter-best-practices-and-design-considerations/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
