<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zelar</title>
    <description>The latest articles on DEV Community by Zelar (@zelarsoft).</description>
    <link>https://dev.to/zelarsoft</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1458895%2F88808ba4-3eb0-44c6-b8b7-bd861bb34efd.png</url>
      <title>DEV Community: Zelar</title>
      <link>https://dev.to/zelarsoft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zelarsoft"/>
    <language>en</language>
    <item>
      <title>From Legacy to Innovation: How APIs are Redefining Digital Experiences and Growth</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Mon, 30 Sep 2024 08:51:48 +0000</pubDate>
      <link>https://dev.to/zelar/from-legacy-to-innovation-how-apis-are-redefining-digital-experiences-and-growth-nbj</link>
      <guid>https://dev.to/zelar/from-legacy-to-innovation-how-apis-are-redefining-digital-experiences-and-growth-nbj</guid>
      <description>&lt;h2&gt;
  
  
  Why APIs are Key to Digital Transformation
&lt;/h2&gt;

&lt;p&gt;APIs, (application programming interfaces), are much more than just technical connectors in the rapidly changing digital world of today. They are essential in helping companies to reintegrate fragmented systems, spur innovation, and react quickly to shifts in the market. APIs enable organizations to reduce complexity, maintain lean operations, and fully utilize the value of their data by allowing data to be shared and connected with ease.&lt;/p&gt;

&lt;p&gt;As popularly said "&lt;strong&gt;No AI without API&lt;/strong&gt;." This demonstrates how important APIs are for facilitating the full potential of cutting-edge technology like artificial intelligence (AI) as well as for linking disparate systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Benefits of APIs in Driving Digital Transformation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1: Enabling Seamless Integration of Legacy Systems&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fact:&lt;/strong&gt; APIs bridge legacy systems with modern tech without costly overhauls.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Walmart used APIs to link its legacy infrastructure to cloud services, improving e-commerce and operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2: Driving Innovation Through Ecosystem Expansion&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fact:&lt;/strong&gt; APIs open doors for external collaboration and faster innovation.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Salesforce allows developers to create custom apps through its API ecosystem, expanding capabilities without in-house development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3: Enhancing Customer Experience&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fact:&lt;/strong&gt; APIs provide seamless, personalized experiences across devices and platforms.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Netflix relies on APIs to keep user data in sync across different devices to deliver a seamless experience of streaming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4: Facilitating Agility and Faster Time-to-Market&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fact:&lt;/strong&gt; APIs accelerate product development, reducing time-to-market.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Uber scaled rapidly by leveraging APIs, opting to integrate services like Google Maps and third-party payment processors instead of building their own. This approach enabled them to focus on core innovations and expand more efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5: Empowering Data-Driven Decision Making&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fact:&lt;/strong&gt; APIs unlock real-time data for analytics, improving decision-making.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; In building its industrial Internet of Things (IoT) platform, Predix, to predict equipment failures and optimize performance, General Electric (GE) - a global leader in sectors like energy and aviation—relied heavily on APIs to drive innovation and efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6: Supporting a Microservices Architecture&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fact:&lt;/strong&gt; APIs enable microservices, improving flexibility and scalability.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Spotify uses microservices backed by APIs for faster feature releases and smoother scalability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further API-Driven Enhancements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. API Monetization:&lt;/strong&gt; Generating Novel Income Sources:&lt;br&gt;
APIs have the potential to generate income in addition to promoting internal improvements. Businesses can develop new business models and increase revenue by providing APIs to outside organizations.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt;  Twilio made a billion dollars by charging for its communication APIs, which enabled other businesses to incorporate its services into their own platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Enhancing Security through API-First Design:&lt;/strong&gt;&lt;br&gt;
Businesses are often concerned about security, especially when exchanging data. Employing an API-first strategy enables businesses to incorporate robust protocols like token-based authentication, OAuth, and encryption right into the design process.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Financial institutions depend on API-first designs to guarantee safe and legal system transactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Enabling AI and Machine Learning Integrations:&lt;/strong&gt;&lt;br&gt;
APIs are essential for incorporating machine learning and AI into corporate processes. They make it possible for AI-driven systems and legacy apps to exchange data seamlessly, which leads to more intelligent automation and better user experiences.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; IBM Watson and Google AI provide APIs that allow easy integration of AI into applications, enabling businesses to adopt machine learning without building complex systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Facilitating Compliance and Governance:&lt;/strong&gt;&lt;br&gt;
APIs are essential to an organization's ability to stay in compliance with industry rules. APIs guarantee that data integrity is safeguarded, audit logs are kept up to date, and access regulations are adhered to by permitting restricted access to sensitive data.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt;  Healthcare institutions can safely exchange patient data while adhering to HIPAA laws by using APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Reducing Technical Debt through API-Driven Modernization:&lt;/strong&gt;&lt;br&gt;
Upgrading old systems all at once can be expensive and unsafe. With APIs, companies may integrate new technologies with pre-existing systems gradually, lowering technological debt over time. With this method, changes can be made gradually without interfering with running business operations.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; Banks employ modernization plans powered by APIs to prolong the life of their core banking systems and simultaneously implement newer technologies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; APIs as the Key to Digital Success&lt;br&gt;
APIs are the foundation of the contemporary digital transformation; they are more than just connectors. APIs provide businesses seeking to stay ahead in the rapidly evolving digital ecosystem of today a wealth of opportunities, from facilitating smooth system interfaces to spurring innovation and revenue. Businesses may increase security and ensure compliance while reducing technical debt, fostering agility, improving customer experiences, and opening new opportunities by embracing APIs.&lt;/p&gt;

&lt;p&gt;Zelarsoft is a trusted partner, specializing in &lt;a href="https://zelarsoft.com/kong-consulting-and-licensing/" rel="noopener noreferrer"&gt;Kong API Gateway solutions&lt;/a&gt; and cloud services. As an official Kong partner, we offer end-to-end consulting, implementation, and licensing services to help businesses maximize their API management capabilities. Our Kong licensing solutions ensure that organizations can leverage the full potential of Kong’s enterprise-grade features, including enhanced security, traffic management, and performance optimization.&lt;/p&gt;

&lt;p&gt;In addition to Kong's powerful API Gateway, we provide seamless integration with cloud platforms like Google Cloud and AWS, delivering cost-effective and scalable solutions. Our expertise ensures businesses can simplify their infrastructure, maintain compliance, and improve operational efficiency. Whether you're looking to secure your APIs, scale your services, or future-proof your IT environment, Zelarsoft offers tailored solutions that accelerate innovation and reduce complexity.&lt;/p&gt;

&lt;p&gt;Schedule a &lt;a href="https://zelarsoft.com/contact-us/" rel="noopener noreferrer"&gt;complimentary consultation with Zelarsoft&lt;/a&gt; to assess your Kong API Gateway setup and optimize your API management strategy for enhanced security, scalability, and performance.&lt;/p&gt;

&lt;p&gt;For more information: &lt;a href="https://zelarsoft.com/" rel="noopener noreferrer"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;br&gt;
Email: &lt;a href="mailto:info@zelarsoft.com"&gt;info@zelarsoft.com&lt;/a&gt;&lt;br&gt;
Phone: 040-42021524 ; 510-262-2801&lt;/p&gt;

</description>
      <category>kong</category>
      <category>api</category>
      <category>digitaltransformation</category>
      <category>growth</category>
    </item>
    <item>
      <title>Integrating a Developer Portal with Kong Admin API: A Deep Dive into a Hierarchical Multi-Tenant Solution</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Mon, 15 Jul 2024 07:12:42 +0000</pubDate>
      <link>https://dev.to/zelar/integrating-a-developer-portal-with-kong-admin-api-a-deep-dive-into-a-hierarchical-multi-tenant-solution-1elf</link>
      <guid>https://dev.to/zelar/integrating-a-developer-portal-with-kong-admin-api-a-deep-dive-into-a-hierarchical-multi-tenant-solution-1elf</guid>
      <description>&lt;p&gt;This document outlines a technical solution of how to implement a developer portal with &lt;a href="https://konghq.com/" rel="noopener noreferrer"&gt;Kong&lt;/a&gt; Admin API to support the multi-tenanted system. This solution is suitable for a customer who needs to have efficient API management for multiple partners in a single Kong deployment and workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architectural Overview:&lt;/strong&gt;&lt;br&gt;
Our solution leverages Kong’s powerful features to design a reliable and secure system. The architecture comprises three main components: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;a href="https://konghq.com/products/kong-gateway" rel="noopener noreferrer"&gt;Kong Gateway&lt;/a&gt;:&lt;/strong&gt; Acts as the API gateway, controlling traffic flow, authentication, and rate limiting.&lt;br&gt;
&lt;strong&gt;2.&lt;a href="https://docs.konghq.com/gateway/latest/admin-api/" rel="noopener noreferrer"&gt;Kong Admin API&lt;/a&gt;:&lt;/strong&gt; Provides an interface for interacting with Kong’s configuration and allowing for the creation, modification, and deletion of services, routes, consumers, and plugins.&lt;br&gt;
&lt;strong&gt;3.Custom Developer Portal:&lt;/strong&gt; A customized web application for partner developers to manage themselves and for customer administrators to manage the partners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hierarchical Role Management:&lt;/strong&gt;&lt;br&gt;
We will implement a three-tiered role-based access control system: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Kong Admin:&lt;/strong&gt; Has full access to the system, including the creation and administration of customer admins.&lt;br&gt;
&lt;strong&gt;2.Customer Admin:&lt;/strong&gt; Controls partner developers and their API usage within their organization including creating, editing and deleting partner developer accounts and manage API subscriptions.&lt;br&gt;
&lt;strong&gt;3.Partner Developer:&lt;/strong&gt; Uses the APIs provided by the customer. They can see what APIs are available, signs up for them, and deal with API keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication and Authorization:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Kong Admin API:&lt;/strong&gt; Protected by Basic Authentication, with credentials used by the custom developer portal for all interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom Developer Portal:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Login:&lt;/strong&gt; Once a user logs in successfully, the portal saves session information (for example, in the form of a JWT token) and uses it for further communication with the Kong Admin API.&lt;br&gt;
&lt;strong&gt;Customer Admin &amp;amp; Partner Developer Differentiation:&lt;/strong&gt; After authentication, the portal determines the user’s role and displays the interface and features based on the role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Loopback Configuration:&lt;/strong&gt;&lt;br&gt;
To enable the developer portal to manage Kong's configuration, we will utilize an API loopback mechanism:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Proxy the Kong Admin API:&lt;/strong&gt; Expose the Kong Admin API through a separate proxy URL to enhance security by concealing the real Admin API endpoint.&lt;br&gt;
&lt;strong&gt;2. Define Services and Routes:&lt;/strong&gt; Configures services and routes in Kong to handle the requests coming to the proxy URL.&lt;br&gt;
&lt;strong&gt;3. Apply Plugins:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;CORS:&lt;/em&gt; Enable CORS on these routes to allow the developer portal (which is a different origin) to access Kong Admin API.&lt;br&gt;
Request Transformer:  Modify requests to meet the data integrity and confidentiality requirements. This could include adding headers, changing paths or even modifying the body of the request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Details:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. User Onboarding and Role Assignment:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;- Kong Admin:&lt;/strong&gt;Sets up Customer Admin accounts in the Kong Manager and provides the initial login credentials.&lt;br&gt;
&lt;strong&gt;- Customer Admin:&lt;/strong&gt; Self-enrolls to the developer portal using the credentials shared by the Kong Admin and manags Partner Developer accounts through the portal.&lt;br&gt;
&lt;strong&gt;- Partner Developer:&lt;/strong&gt; Self-enrolls on the developer portal, authorized by the Customer Admin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Custom Developer Portal Development:&lt;/strong&gt;&lt;br&gt;
Use an appropriate frontend framework (for example, React, Angular, Vue. js) to Customise the in-built the developer portal. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key functionalities include:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;- User Authentication:&lt;/strong&gt;  Secure login, logout, and session management.&lt;br&gt;
&lt;strong&gt;- Role-Based Views:&lt;/strong&gt;  Different views and actions depending on the role of the user (Kong Admin, Customer Admin, Partner Developer).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. API Management:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;- Customer Admin:&lt;/strong&gt; To view, modify, and control the API access for their Partner Developers.&lt;br&gt;
&lt;strong&gt;- Partner Developer:&lt;/strong&gt;  View and search through lists of available APIs, subscribe to APIs, access documentation, and manage API keys.&lt;br&gt;
&lt;strong&gt;- Kong Admin API Integration:&lt;/strong&gt; The integration majorly helps with portal developers’ management from custom portal itself instead of exposing the admin application externally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Loopback Configuration:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Configure Proxy:&lt;/strong&gt; Configure a reverse proxy (for example, Nginx) to redirect requests to the Kong Admin API through a specific endpoint.&lt;br&gt;
&lt;strong&gt;2. Create Kong Service:&lt;/strong&gt; Create a Kong service that corresponds to the Admin API to be proxied.&lt;br&gt;
&lt;strong&gt;3. Create Kong Route:&lt;/strong&gt;  Make a route that will direct any request made to the proxy URL to the Kong Admin API service.&lt;br&gt;
&lt;strong&gt;4. Apply Plugins:&lt;/strong&gt;&lt;br&gt;
    &amp;gt; Include the CORS plugin to the route and set the allowed origin, headers, and methods.&lt;br&gt;
    &amp;gt; Develop a Request Transformer plugin to adjust requests for security and standardization purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of this Solution:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1.Centralized Management:&lt;/strong&gt; Single Kong deployment and workspace ease management and offer a holistic view of all partners and APIs.&lt;br&gt;
&lt;strong&gt;2.Enhanced Security:&lt;/strong&gt; Hierarchical roles, Basic Authentication for the Admin API, and proxying the Admin API also improve the security.&lt;br&gt;
&lt;strong&gt;3.Improved Developer Experience:&lt;/strong&gt; The custom developer portal provides a simple way for developers to discover, consume, and manage APIs.&lt;br&gt;
&lt;strong&gt;4.Scalability and Flexibility:&lt;/strong&gt;  It is easy to extend the solution to support more partners and APIs as the system grows.&lt;br&gt;
This approach offers a clear and secure plan for integrating a developer portal with Kong Admin API. &lt;/p&gt;

&lt;p&gt;By following security best practices and utilizing Kong’s capabilities, this solution provides a scalable and user-friendly platform for API and partner management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Citations:&lt;/strong&gt;&lt;br&gt;
[1] &lt;a href="https://docs.konghq.com/gateway/latest/admin-api/" rel="noopener noreferrer"&gt;https://docs.konghq.com/gateway/latest/admin-api/&lt;/a&gt;&lt;br&gt;
[2] &lt;a href="https://curity.io/resources/learn/kong-dev-portal/" rel="noopener noreferrer"&gt;https://curity.io/resources/learn/kong-dev-portal/&lt;/a&gt;&lt;br&gt;
[3] &lt;a href="https://cloudentity.com/developers/howtos/enforcement/kong/" rel="noopener noreferrer"&gt;https://cloudentity.com/developers/howtos/enforcement/kong/&lt;/a&gt;&lt;br&gt;
[4] &lt;a href="https://www.youtube.com/watch?v=nuvdTb9XlkU" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=nuvdTb9XlkU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more information:&lt;/strong&gt; &lt;a href="https://zelarsoft.com/" rel="noopener noreferrer"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="mailto:info@zelarsoft.com"&gt;info@zelarsoft.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Phone:&lt;/strong&gt; 040-42021524 ; 510-262-2801&lt;/p&gt;

</description>
      <category>kongadmin</category>
      <category>multitenantsolution</category>
      <category>developerportal</category>
      <category>api</category>
    </item>
    <item>
      <title>Pilot to Full Adoption</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Thu, 11 Jul 2024 12:07:08 +0000</pubDate>
      <link>https://dev.to/zelar/pilot-to-full-adoption-4mgj</link>
      <guid>https://dev.to/zelar/pilot-to-full-adoption-4mgj</guid>
      <description>&lt;p&gt;With the goal of increasing developer productivity and optimizing coding procedures, our customer set out to integrate GitHub Copilot throughout their entire company. By using a disciplined strategy, 1,600 developers were eventually engaged and the pilot phase to full adoption was smoothly transitioned. This article highlights important tactics and lessons acquired while outlining the project's phases, procedures, and results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Overview:&lt;/strong&gt;&lt;br&gt;
Project: &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; Copilot Adoption Delivery&lt;br&gt;
Duration: 16 weeks&lt;br&gt;
Participants: 1,200+ targeted developers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Phases:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Pilot Phase:&lt;/strong&gt;&lt;br&gt;
Duration: 4 weeks&lt;br&gt;
Participants: 37 Influencers&lt;/p&gt;

&lt;p&gt;The first round of the pilot program concentrated on a small cohort of 37 prominent developers who would advocate for GitHub Copilot's implementation inside the company. These influencers were essential in spreading the word about the tool, giving suggestions, and serving as first responders for inexperienced users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Activities:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;i. Workshops &amp;amp; Demo Sessions:&lt;/strong&gt; Designed with backend and frontend developers in mind, we conducted practical workshops and demo sessions.&lt;br&gt;
&lt;strong&gt;ii. Mechanisms of Feedback:&lt;/strong&gt; Frequent feedback sessions, surveys, and check-ins are used to improve the tool's deployment and support system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Adoption Phase&lt;/strong&gt;&lt;br&gt;
Duration: 12 weeks&lt;br&gt;
Participants: 1,200+ Developers&lt;/p&gt;

&lt;p&gt;After the successful pilot, four iterations of the adoption phase involving developers were implemented. This staged strategy made it possible to scale gradually, quickly resolve any issues, and guarantee a smooth adoption process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Activities:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;i. Workshops:&lt;/strong&gt; Ongoing practical sessions addressing best practices, real-world applications, and capabilities of GitHub Copilot.&lt;br&gt;
&lt;strong&gt;ii. Structure of Support:&lt;/strong&gt; A strong support system with channels set aside for questions and issues was established.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strategies for Success:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Promoting Adoption:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leveraged the influence of pilot participants to drive adoption among their peers.&lt;/li&gt;
&lt;li&gt;Regular feature refresh workshops to keep users updated and engaged.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Feedback and Continuous Improvement:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Actively sought feedback to refine training materials and support mechanisms.&lt;/li&gt;
&lt;li&gt;Incorporated user suggestions to enhance the tool’s usability and relevance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Comprehensive Training:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conducted targeted workshops focusing on different development roles and tasks.&lt;/li&gt;
&lt;li&gt;Provided practical, hands-on sessions to ensure users could effectively utilize GitHub Copilot in their daily workflows.
Outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developer Satisfaction:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High acceptance rate with positive feedback on productivity gains and time savings.&lt;/li&gt;
&lt;li&gt;Enhanced coding efficiency and reduced manual effort through AI-assisted development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Productivity and Time Savings&lt;/strong&gt;   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Significant improvement in code quality and development speed.&lt;/li&gt;
&lt;li&gt;Developers reported quicker comprehension of codebases and faster implementation of new features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Acceptance Rate&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overwhelmingly positive Net Promoter Scores from pilot participants, paving the way for full adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Structured, progressive adoption tactics work, as demonstrated by the GitHub Copilot Adoption Delivery project. Through active feedback-seeking, thorough training, and engagement with key influencers, we successfully incorporated GitHub Copilot into the organization's development processes. This project raised the bar for future technological adoptions while also increasing developer productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future Outlook:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The effective implementation of GitHub Copilot has created opportunities for additional improvements to development tools and procedures. We're excited to carry on our collaboration and investigate fresh approaches to promote efficiency and creativity. The present case study functions as a model for analogous endeavors, elucidating the significance of strategic planning, ongoing enhancement, and user involvement in accomplishing triumphant technology adoption.&lt;/p&gt;

&lt;p&gt;Zelar is a cloud-native consulting company specializing in modernizing legacy systems, enhancing DevOps culture, and accelerating code releases. Our expertise helps businesses significantly increase technical productivity and save on engineering resources. Additionally, we can assist you in adopting GitHub to streamline your development workflows and improve collaboration.&lt;/p&gt;

&lt;p&gt;For more information: &lt;a href="https://zelarsoft.com/" rel="noopener noreferrer"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;br&gt;
Email: &lt;a href="mailto:info@zelarsoft.com"&gt;info@zelarsoft.com&lt;/a&gt; &lt;br&gt;
Phone: 040-42021524 ; 510-262-2801&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>adoption</category>
      <category>zelar</category>
    </item>
    <item>
      <title>Custom plugin development with an emphasis on RSA/HMAC encryption</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Wed, 19 Jun 2024 09:39:05 +0000</pubDate>
      <link>https://dev.to/zelarsoft/custom-plugin-development-with-an-emphasis-on-rsahmac-encryption-b8n</link>
      <guid>https://dev.to/zelarsoft/custom-plugin-development-with-an-emphasis-on-rsahmac-encryption-b8n</guid>
      <description>&lt;p&gt;By &lt;strong&gt;&lt;em&gt;Venkata Reddy Bhavanam&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Author LinkedIn:&lt;a href="https://www.linkedin.com/in/venkatareddybhavanam/"&gt;https://www.linkedin.com/in/venkatareddybhavanam/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Role of Zelar:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Zelar developed a custom Kong plugin to enhance the client's security. The plugin integrated RSA encryption for robust data integrity and authentication and was adapted to support the client's unique signing string format. By modifying the open-source plugin code, Zelar seamlessly integrated the solution into the client's ecosystem, meeting their specific security requirements without disrupting ongoing operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About client:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The client, a leading digital bank in Indonesia, manages vast data critical to its operations, requiring intricate transformations across digital platforms. This process was time-consuming and prone to errors. By leveraging advanced technology and a customer-centric approach, the bank enhances its services, ensuring efficient and secure financial solutions while driving digital transformation in the Indonesian banking industry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Statement:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Need for Enhanced Security: The customer needed a solution that was not only covered by the current capabilities of Kong’s HMAC plugin but also covered the RSA encryption. This was mandatory in order fulfil their particular security requirements that use the asymmetric encryption methods.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Custom Signing String Format: The HMAC plugin was not capable of supporting the customer's unique signing string format that uses a different separator and specific attributes, which are vital for the security processes of the company.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution Provided:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom Plugin Development:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RSA Encryption Implementation:&lt;/strong&gt; A custom plugin was created to include RSA encryption, providing secure and verifiable data integrity and authentication through a public/private key mechanism.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Adaptation to Custom Signing Formats:&lt;/strong&gt;  The custom plugin was tailored to fit the client's unique signing string format, including specific separators and attributes. It was maximally customized to be compatible with the client's security infrastructure and protocols.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The solution was to alter the open-source plugin code from the base of the GitHub repository of Kong to incorporate the required features. This method was effective, utilizing already available resources for that and the integration with Kong’s ecosystem was smooth. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The execution of the custom plugin has been successful in meeting the client’s specific security requirements, thus allowing them to keep the data security and integrity high level across their applications. The feedback showed that the solution worked perfectly and did not interfere with the present activities.&lt;/p&gt;

&lt;p&gt;For more information: &lt;a href="https://zelarsoft.com/"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kong</category>
      <category>customplugin</category>
      <category>encryption</category>
      <category>plugindevelopment</category>
    </item>
    <item>
      <title>Kong Plugin Development: Local Development and Installation on Your Laptop/VM</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Mon, 10 Jun 2024 07:47:51 +0000</pubDate>
      <link>https://dev.to/zelar/kong-plugin-development-local-development-and-installation-on-your-laptopvm-dbp</link>
      <guid>https://dev.to/zelar/kong-plugin-development-local-development-and-installation-on-your-laptopvm-dbp</guid>
      <description>&lt;p&gt;By &lt;strong&gt;Venkata Reddy Bhavanam&lt;/strong&gt;&lt;br&gt;
Author LinkedIn:&lt;a href="https://www.linkedin.com/in/venkatareddybhavanam/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/venkatareddybhavanam/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kong is a popular, lightweight, fast, and flexible cloud-native API gateway. One of the key benefits of using Kong is its ability to extend the core functionality with the help of plugins. Kong provides many inbuilt plugins out of the box, but we are not limited to them. One can develop a custom plugin for their use case and inject it into the request/response life cycle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78wfr1vodx70se7pk7qo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78wfr1vodx70se7pk7qo.png" alt="Image description" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kong API Gateway (image Credits — KongHQ):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kong is a Lua application running on top of &lt;strong&gt;Nginx&lt;/strong&gt; and &lt;strong&gt;OpenResty&lt;/strong&gt;. So, it allows building custom plugins natively using Lua. Writing custom plugins in other languages like &lt;strong&gt;Go&lt;/strong&gt;, &lt;strong&gt;Javascript&lt;/strong&gt;, and &lt;strong&gt;Python&lt;/strong&gt; is also possible.&lt;/p&gt;

&lt;p&gt;Kong can be installed in several ways. You can install Kong in a VM, Docker, or Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;This blog doesn’t aim to teach you how to write a custom plugin but how to install a custom plugin in a VM-based mode of Kong installation. If you are interested in how to write a custom plugin, please check out the &lt;strong&gt;Kong guides on plugin development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ideally, you’d use &lt;strong&gt;Pongo for custom plugin development&lt;/strong&gt;. Once the development is complete, you can use one of the following methods to deploy the plugin based on your mode of Kong installation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At a high level, a Kong plugin will have two files:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;handler.lua:&lt;/strong&gt; This is where we write Lua functions that get called during different phases of the request/response life cycle. These are maps to Nginx worker life cycle methods.&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;schema.lua:&lt;/strong&gt; This is where we define the plugin configuration as schema(A Lua table), add some validations, provide default values, etc.&lt;/p&gt;

&lt;p&gt;For this example, we’ll take a simple plugin that returns the version of the plugin as a response header. Below is the code for handler.lua&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;local plugin = {
  PRIORITY = 1000, -- set the plugin priority, which determines plugin execution order
  VERSION = "0.1", -- version in X.Y.Z format. Check hybrid-mode compatibility requirements.
}

function plugin:init_worker()
  kong.log.debug("saying hi from the 'init_worker' handler")
end

-- runs in the 'access_by_lua_block'
function plugin:access(plugin_conf)
  kong.service.request.set_header(plugin_conf.request_header, "this is on a request")
end

-- runs in the 'header_filter_by_lua_block'
function plugin:header_filter(plugin_conf)
  kong.response.set_header(plugin_conf.response_header, plugin.VERSION)
end

return plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and the schema.lua&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;local typedefs = require "kong.db.schema.typedefs"

local PLUGIN_NAME = "api-version"

local schema = {
  name = "api-version",
  fields = {
    { consumer = typedefs.no_consumer },  -- this plugin cannot be configured on a consumer (typical for auth plugins)
    { protocols = typedefs.protocols_http },
    { config = {
        type = "record",
        fields = {
          { request_header = typedefs.header_name {
              required = true,
              default = "Hello-World" } },
          { response_header = typedefs.header_name {
              required = true,
              default = "Bye-World" } },
        },
        entity_checks = {
          { at_least_one_of = { "request_header", "response_header" }, },
          { distinct = { "request_header", "response_header"} },
        },
      },
    },
  },
}

return schema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Deploying a custom plugin on a VM:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Please check this out to &lt;strong&gt;install the Kong gateway on Ubuntu&lt;/strong&gt;. Once the installation is complete, ensure you can access the gateway at &lt;strong&gt;&lt;a href="http://localhost:8000" rel="noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install the API-version plugin:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From the plugin folder, hit &lt;code&gt;luarocks make&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The default location for the Kong configuration is located at &lt;code&gt;/etc/kong/kong.conf&lt;/code&gt; To tell Kong we want to install a custom plugin, add the plugin name to &lt;code&gt;plugins&lt;/code&gt; config variable so that it looks like &lt;code&gt;plugins=bundled,custom-plugin-name&lt;/code&gt; . In our case, it will be: &lt;code&gt;plugins=bundled,api-version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And then restart Kong, &lt;code&gt;kong restart -c /etc/kong/kong.conf&lt;/code&gt;&lt;br&gt;
Once Kong is reloaded, the plugin should appear in the list of available plugins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2xutxq61c3wnbycwmzy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2xutxq61c3wnbycwmzy.png" alt="Image description" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Installed custom plugin&lt;br&gt;
We can enable the plugin globally or on a particular service/route.&lt;br&gt;
Let’s create a service, route, and apply the plugin to the service to see it in action. We can create all these through the Kong manager UI, but we’ll use HTTPie to create these through the terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http :8001/services name=mockbin url=https://mockbin.org Kong-Admin-Token:password
http -f :8001/services/mockbin/routes name=mock-route paths=/echo Kong-Admin-Token:password
http -f :8001/services/mockbin/plugins name=api-version Kong-Admin-Token:password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, if we request the /echo route, we can see the custom header that returns the plugin version in the response&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http :8000/echo --headers
HTTP/1.1 200 OK
Bye-World: 0.1
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s how a custom plugin can be installed in a VM-based Kong installation. In the next post, we’ll see how to &lt;strong&gt;install a custom plugin through Docker and Kubernetes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more information:&lt;/strong&gt; &lt;a href="https://zelarsoft.com/" rel="noopener noreferrer"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kong</category>
      <category>lua</category>
      <category>kongplugin</category>
      <category>kongapigateway</category>
    </item>
    <item>
      <title>Installing a Custom Plugin in Docker: Kong Plugin Development</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Tue, 04 Jun 2024 07:37:47 +0000</pubDate>
      <link>https://dev.to/zelar/installing-a-custom-plugin-in-docker-kong-plugin-development-4m5f</link>
      <guid>https://dev.to/zelar/installing-a-custom-plugin-in-docker-kong-plugin-development-4m5f</guid>
      <description>&lt;p&gt;By Venkata Reddy Bhavanam&lt;br&gt;
Author LinkedIn:&lt;a href="https://www.linkedin.com/in/venkatareddybhavanam/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/venkatareddybhavanam/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the second post on installing a custom plugin in Kong API Gateway. Please check out the 1st post if you need a quick introduction to Kong and how to install a custom plugin in a VM.&lt;br&gt;
In this post, we’ll learn how to install a custom plugin in Docker.&lt;/p&gt;

&lt;p&gt;We’ll use the same custom plugin code as we used in the previous post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwgwmpuvycimy3fxudsi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwgwmpuvycimy3fxudsi.png" alt="Image description" width="500" height="500"&gt;&lt;/a&gt;Kong Plugin Development&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copying the code over here for completeness. The folder structure:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;api-version/&lt;br&gt;
├── handler.lua&lt;br&gt;
└── schema.lua&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The plugin name &lt;code&gt;api-version&lt;/code&gt; and the contents of &lt;code&gt;schema.lua&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;local typedefs = require "kong.db.schema.typedefs"

local PLUGIN_NAME = "api-version"

local schema = {
  name = "api-version",
  fields = {
    { consumer = typedefs.no_consumer },  -- this plugin cannot be configured on a consumer (typical for auth plugins)
    { protocols = typedefs.protocols_http },
    { config = {
        type = "record",
        fields = {
          { request_header = typedefs.header_name {
              required = true,
              default = "Hello-World" } },
          { response_header = typedefs.header_name {
              required = true,
              default = "Bye-World" } },
        },
        entity_checks = {
          { at_least_one_of = { "request_header", "response_header" }, },
          { distinct = { "request_header", "response_header"} },
        },
      },
    },
  },
}

return schema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contents of &lt;code&gt;handler.lua&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;local typedefs = require "kong.db.schema.typedefs"

local PLUGIN_NAME = "api-version"

local schema = {
  name = "api-version",
  fields = {
    { consumer = typedefs.no_consumer },  -- this plugin cannot be configured on a consumer (typical for auth plugins)
    { protocols = typedefs.protocols_http },
    { config = {
        type = "record",
        fields = {
          { request_header = typedefs.header_name {
              required = true,
              default = "Hello-World" } },
          { response_header = typedefs.header_name {
              required = true,
              default = "Bye-World" } },
        },
        entity_checks = {
          { at_least_one_of = { "request_header", "response_header" }, },
          { distinct = { "request_header", "response_header"} },
        },
      },
    },
  },
}

return schema

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Building the docker image:&lt;/strong&gt;&lt;br&gt;
We’ll take a base Kong image, add the plugin(and dependencies, if any), and use the final image. The &lt;code&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;FROM kong/kong-gateway:3.2.2.1&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**USER root**

# luarocks install dependency-name # to install any dependencies for cusotm plugin
RUN mkdir /usr/local/share/lua/5.1/kong/plugins/api-versionCOPY ./api-version /usr/local/share/lua/5.1/kong/plugins/api-version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, we are taking Kong base image kong/kong-gateway:3.2.2.1 and adding our plugin code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We can now build it and run it with the following:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t kong-demo .
docker run -d --name kong-demo \
  -p "8000-8001:8000-8001" \
  -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
  -e "KONG_PROXY_LISTEN=0.0.0.0:8000" \
  -e "KONG_DATABASE=off" \
  -e "KONG_LOG_LEVEL=debug" \
  -e "KONG_PLUGINS=bundled,api-version" \
  kong-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, we specify the custom plugin name along with the bundled plugins using &lt;code&gt;KONG_PLUGINS&lt;/code&gt;environment variable.&lt;/p&gt;

&lt;p&gt;Kong can be run either in DB mode using Postgres (and Cassandra, but it will be deprecated) or DB Less mode. We’ll use db-less mode and the following declarative config to create a service, route, and apply the plugin for this demo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.yaml
_format_version: "3.0"
_transform: trueservices:
  - name: demo
    url: https://mockbin.org
    plugins:
      - name: api-version
    routes:
      - name: demo-route
        paths:
          - /echo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create the config with an API call to the admin API.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -X POST http://localhost:8001/config -F config=@config.yam&lt;/code&gt;l&lt;/p&gt;

&lt;p&gt;Verify the custom plugin works by visiting the proxy URL. We’ll use HTTPie&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http :8000/echo --headers
HTTP/1.1 200 OK
Bye-World: 0.1
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. In the next post, we’ll see how to install the custom plugin in Kubernetes. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more information:&lt;/strong&gt; &lt;a href="https://zelarsoft.com/" rel="noopener noreferrer"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kong</category>
      <category>kongplugi</category>
      <category>docker</category>
      <category>apigateway</category>
    </item>
    <item>
      <title>Installing Custom Plugins in Kong API Gateway on Kubernetes: Helm Deployment in Hybrid Mode</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Mon, 27 May 2024 11:14:57 +0000</pubDate>
      <link>https://dev.to/zelar/installing-custom-plugins-in-kong-api-gateway-on-kubernetes-helm-deployment-in-hybrid-mode-3552</link>
      <guid>https://dev.to/zelar/installing-custom-plugins-in-kong-api-gateway-on-kubernetes-helm-deployment-in-hybrid-mode-3552</guid>
      <description>&lt;p&gt;By Venkata Reddy Bhavanam&lt;br&gt;
&lt;em&gt;Author LinkedIn&lt;/em&gt;: &lt;a href="https://www.linkedin.com/in/venkatareddybhavanam/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/venkatareddybhavanam/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the 3rd post on installing custom plugins in Kong API Gateway. Please check out the first post for a quick introduction to Kong and installing a custom plugin in VM mode.&lt;/p&gt;

&lt;p&gt;In this post, we’ll learn how to install a custom plugin deployed using Helm in Hybrid mode in Kubernetes, but this should also work in other modes of deployment in Kubernetes.&lt;/p&gt;

&lt;p&gt;A custom plugin can be installed in Kong and deployed in Kubernetes in two ways.&lt;/p&gt;

&lt;p&gt;1.Building a custom image by adding the plugin code to the Kong base image. This will be useful when our plugin needs a dependency at the OS level.&lt;/p&gt;

&lt;p&gt;2.Adding the plugin as k8s ConfigMap or Secret. This is probably the easiest of two, as we don’t have to maintain the image in a custom container registry.&lt;/p&gt;

&lt;p&gt;For #1, you can check how we can build the image in the last post of this series. Once the image is created, assuming the Kong gateway is deployed using helm, we can add the updated image with the tag in the values-&lt;code&gt;cp.yaml&lt;/code&gt; and values-&lt;code&gt;dp.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We’ll use the same plugin api-version that we used in the last post.&lt;/p&gt;

&lt;p&gt;First, we must create a Kubernetes secret for pulling the custom Kong image from our private docker registry. Assuming we have our image in GHCR, we can do the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create secret docker-registry your-secret-name-to-be-able-pull-image-from-cr --docker-server=ghcr.io --docker-username=your-user --docker-password=your-passwrod --docker-email=your-email -n your-namespace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, update the values-cp.yaml and values-dp.yaml With the following values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;repository: ghcr.io/zelarhq/kong/kong-gateway
tag: "3.2.2.1.api-version.01" # Should change this image as per company standards, refer to supported image tags https://hub.docker.com/r/kong/kong-gateway/tags
pullSecrets:
  - your-secret-name-to-be-able-pull-image-from-cr

env:
  plugins: "bundled,api-version"

...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And upgrade CP and DP with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm upgrade --install kong-cp kong/kong --namespace kong-enterprise -f values-cp.yaml
helm upgrade --install kong-dp kong/kong --namespace kong-enterprise -f values-dp.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To enable the plugin, it should appear in the Kong Manager under the Plugins section.&lt;/p&gt;

&lt;p&gt;For #2, create a k8s Secret,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl create secret generic -n &amp;lt;namespace_name&amp;gt; kong-plugin-api-version --from-file=kong-plugin-api-version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;OR a ConfigMap&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl create configmap kong-plugin-api-version --from-file=kong-plugin-api-version -n &amp;lt;namespace_name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Update the values-cp.yaml and values-dp.yaml files with the following content:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plugins:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;secrets: #configMaps -&amp;gt; if using config map
  - name: kong-plugin-api-version
    pluginName: api-version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And upgrade CP and DP with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm upgrade --install kong-cp kong/kong --namespace &amp;lt;your-namespace&amp;gt; -f values-cp.yaml
helm upgrade --install kong-dp kong/kong --namespace &amp;lt;your-namespace&amp;gt; -f values-dp.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For more information:&lt;/strong&gt; &lt;a href="https://zelarsoft.com/" rel="noopener noreferrer"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kong</category>
      <category>kongplugin</category>
      <category>kongdevlopment</category>
      <category>kumamesh</category>
    </item>
    <item>
      <title>Simplifying Distributed Applications with Multi-Zone Kuma Service Mesh Deployment</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Mon, 20 May 2024 09:20:11 +0000</pubDate>
      <link>https://dev.to/zelar/simplifying-distributed-applications-with-multi-zone-kuma-service-mesh-deployment-lfb</link>
      <guid>https://dev.to/zelar/simplifying-distributed-applications-with-multi-zone-kuma-service-mesh-deployment-lfb</guid>
      <description>&lt;p&gt;&lt;em&gt;By Amrutha Paladugu&lt;/em&gt;&lt;br&gt;
Author LinkedIn: &lt;a href="https://www.linkedin.com/in/amrutha-paladugu/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/amrutha-paladugu/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hcqfvrrtcvdqcm6bzqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hcqfvrrtcvdqcm6bzqo.png" alt="Image description" width="365" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the exciting world of distributed applications, juggling network connectivity and security across various environments can be quite a task. But fret not! Kuma, a vibrant open-source service mesh, comes to the rescue with its robust capabilities for managing and safeguarding communication between services. It simplifies the complexity of managing distributed systems and enables developers to focus on building applications without worrying about network-related challenges.&lt;/p&gt;

&lt;p&gt;So, buckle up as we dive into the thrilling adventure of deploying a multi-zone global control plane using Kuma and the incredible Kubernetes platform. The multi-zone deployment allows you to distribute your control plane across multiple regions or availability zones, ensuring high availability and resilience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bigger Picture:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The underlying logic of the Kuma multi-zone deployment revolves around establishing a distributed control plane architecture with global and zonal control planes.&lt;/p&gt;

&lt;p&gt;• The global control plane is the central authority for the entire service mesh. It manages the overall configuration and policies that apply across all zones.&lt;br&gt;
• Zonal control planes (CP) are deployed in specific zones, such as regions or availability zones. Each zonal CP connects to the global control plane to synchronize information. Zonal CPs provide local processing and handle local traffic efficiently.&lt;br&gt;
• Cross-zone communication is enabled through the global control plane, which manages global policies and synchronizes information between zones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F843seev71j9clzt8sp5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F843seev71j9clzt8sp5x.png" alt="Image description" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The multi-zone mesh deployment process involves the following steps:&lt;/p&gt;

&lt;p&gt;• Installing Kubernetes and Kumactl for cluster management and interaction with the control plane&lt;br&gt;
• The global control plane is deployed using Helm, along with PostgreSQL for configuration storage&lt;br&gt;
• Zonal control planes are installed on separate Kubernetes clusters, connected to the global control plane using the KDS (Kuma Discovery Service)&lt;br&gt;
• Mesh configuration is enabled by labeling namespaces and deploying applications within those namespaces&lt;br&gt;
• Cross-zone communication is facilitated by configuring the ZoneIngress and testing connectivity between zones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Install K8s and Install kumactl&lt;/p&gt;

&lt;p&gt;The first step is to install Kubernetes (K8s). We are exploring the scenario where Kuma Service Mesh runs on top of Kubernetes, so we need a Kubernetes cluster to deploy our control plane.&lt;/p&gt;

&lt;p&gt;To install a K3s cluster, run the following commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -sfL https://get.k3s.io | sh - &lt;br&gt;
sudo chmod 644 /etc/rancher/k3s/k3s.yaml&lt;br&gt;
mkdir ~/.kube&lt;br&gt;
sudo cp  /etc/rancher/k3s/k3s.yaml ~/.kube/config&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, we must install the kumactl command-line tool, which interacts with the Kuma control plane.&lt;/p&gt;

&lt;p&gt;To install kumactl, run the following commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -L https://kuma.io/installer.sh | VERSION=2.3.0 sh -&lt;br&gt;
cd kuma-2.3.0/bin&lt;br&gt;
PATH=$(pwd):$PATH&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Deploy a Multi-Zone Global Control Plane:&lt;/p&gt;

&lt;p&gt;We will deploy the global control plane on the Kubernetes cluster (this could be on a VM or any cloud) following the steps below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.1:&lt;/strong&gt; Create the Namespace:&lt;/p&gt;

&lt;p&gt;Create a Kubernetes namespace for the Kuma system:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl create ns kuma-system&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.2:&lt;/strong&gt; Install PostgreSQL using Helm:&lt;/p&gt;

&lt;p&gt;Use Helm to install PostgreSQL, which is required for storing Kuma's configuration:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;helm repo add bitnami https://charts.bitnami.com/bitnami &lt;br&gt;
helm install my-postgresql bitnami/postgresql - version 12.5.8 -n kuma-system&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note the database name, password, user, and host read-write (RW) for later use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.3:&lt;/strong&gt; Define Kubernetes Secrets Manifest&lt;/p&gt;

&lt;p&gt;Create a secrets.yaml file to store sensitive information required for connecting to the PostgreSQL database:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apiVersion: v1&lt;br&gt;
kind: Secret&lt;br&gt;
metadata:&lt;br&gt;
name: your-secret-name&lt;br&gt;
type: Opaque&lt;br&gt;
data:&lt;br&gt;
POSTGRES_DB: &amp;lt;Postgres-DB-name&amp;gt;&lt;br&gt;
POSTGRES_HOST_RW: &amp;lt;Postgres-host&amp;gt;&lt;br&gt;
POSTGRES_USER: &amp;lt;Postgres-user&amp;gt;&lt;br&gt;
POSTGRES_PASSWORD: &amp;lt;Postgres-password&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Replace the placeholders with the corresponding base64-encoded values and apply the secrets manifest to the Kuma-system namespace:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl apply -f secrets.yaml -n kuma-system&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.4:&lt;/strong&gt; Add the Kong-Mesh Repo:&lt;/p&gt;

&lt;p&gt;Add the Kuma Helm chart repository:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;helm repo add kuma https://kumahq.github.io/charts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.5:&lt;/strong&gt; Update Chart Values:&lt;/p&gt;

&lt;p&gt;Update the values in the values.yaml file to configure the global control plane:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;controlPlane:
environment: "universal"
mode: "global"
secrets:
postgresDb:
Secret: your-secret-name
Key: POSTGRES_DB
Env: KUMA_STORE_POSTGRES_DB_NAME
postgresHost:
Secret: your-secret-name
Key: POSTGRES_HOST_RW
Env: KUMA_STORE_POSTGRES_HOST
postgrestUser:
Secret: your-secret-name
Key: POSTGRES_USER
Env: KUMA_STORE_POSTGRES_USER
postgresPassword:
Secret: your-secret-name
Key: POSTGRES_PASSWORD
Env: KUMA_STORE_POSTGRES_PASSWORD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The controlPlane.environment will be "Kubernetes" in a Kubernetes-based deployment, and controlPlane.mode will be "zone" for the zonal control-plane&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.7:&lt;/strong&gt; Install global control plane&lt;/p&gt;

&lt;p&gt;Install the global control plane using Helm:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;helm install kuma -f values.yaml - skip-crds -n kuma-system kuma/kuma&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.8:&lt;/strong&gt; Find the EXTERNAL-IP and Port:&lt;/p&gt;

&lt;p&gt;The global control plane's Kuma Discovery Service (KDS) component is responsible for managing the dynamic configuration updates across the entire service mesh. The KDS communicates with each data plane using a secure gRPC-based protocol. KDS is the external IP of the global-zone-sync service and can be accessed as shown below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get services -n kuma-system

 NAMESPACE     NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                                                                  AGE
 kuma-system   global-zone-sync     LoadBalancer   10.105.9.10     35.226.196.103   5685:30685/TCP                                                           89s
 kuma-system   kuma-control-plane     ClusterIP      10.105.12.133   &amp;lt;none&amp;gt;           5681/TCP,443/TCP,5676/TCP,5677/TCP,5678/TCP,5679/TCP,5682/TCP,5653/UDP   90s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the global-kds-address is 35.226.196.103 with port 5685. Note that when the global control plane is on a VM, the public IP of the VM will act as the global-kds-address if you are trying to connect to this control plane from a different network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Set up Zone Control Planes:&lt;/p&gt;

&lt;p&gt;We shall install a zonal control plane on a k3s cluster on a different VM. Zone-name is an arbitrary string. This value registers the zone control plane with the global control plane.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm install kuma \
 - create-namespace \
 - namespace kuma-system \
 - set controlPlane.mode=zone \
 - set controlPlane.zone=&amp;lt;zone-name&amp;gt; \
 - set ingress.enabled=true \
 - set controlPlane.kdsGlobalAddress=grpcs://&amp;lt;global-kds-address&amp;gt;:5685 \
 - set controlPlane.tls.kdsZoneClient.skipVerify=true kuma/kuma
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that this zonal control plane is already connected to the global control plane as we passed the global kds value to the 'controlPlane. kdsGlobalAddress' variable during installation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Enable Mesh and Deploy a Sample App&lt;/p&gt;

&lt;p&gt;One way to enable a mesh for Kubernetes deployments is through labeling a namespace. When you label the namespace with a specific annotation, it instructs Kuma to inject the sidecar proxy into the pods running in that namespace&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4.1:&lt;/strong&gt; Create a Namespace and Enable Sidecar Injection&lt;br&gt;
Create a Kubernetes namespace for your application:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl create ns &amp;lt;name-space&amp;gt;&lt;br&gt;
kubectl label ns &amp;lt;name-space&amp;gt; kuma.io/sidecar-injection=enabled&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Any deployments in this labeled namespace are part of the mesh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4.2:&lt;/strong&gt; Deploy a Sample App&lt;br&gt;
Deploy a sample app in this namespace using a Debian-based Node.js container image:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl create deploy - image debianmaster/nodejs-welcome &amp;lt;deployment-name&amp;gt; -n &amp;lt;name-space&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4.3:&lt;/strong&gt; Expose the Deployment as a Service&lt;/p&gt;

&lt;p&gt;Expose the deployment as a service using a NodePort type:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl expose deployment &amp;lt;deployment-name&amp;gt; - type=NodePort - name=&amp;lt;service-name&amp;gt; - port=8080 - target-port=8080 -n &amp;lt;name-space&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Verify mesh by inspecting the pod containers.&lt;br&gt;
To access Kuma through GUI or kumactl, we need to first port-forward the API service with the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl port-forward svc/kuma-control-plane -n kuma-system 5681:5681&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can run kumactl get zones command, or check the list of zones in the web UI for the global control plane to verify zone control plane connections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the kumactl is not connected to the global control plane, run the below command to establish a connection&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kumactl config control-planes add --name=&amp;lt;name&amp;gt; --address htto://localhost:5681&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When a zone control plane connects to the global control plane, the Zone resource is created automatically in the global control plane.&lt;/p&gt;

&lt;p&gt;And then navigate to :5681/gui see the GUI.&lt;/p&gt;

&lt;p&gt;You will notice that Kuma automatically creates an mesh entity with name. default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Test Cross-Zone Communication&lt;/p&gt;

&lt;p&gt;Replicate the above local zone creation steps and create a second zone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5.1:&lt;/strong&gt; Patch the ZoneIngress:&lt;/p&gt;

&lt;p&gt;For enabling cross-zone communication in the current scenario where the zones are on different networks, the 'advertisedAddress' in the ingress object needs to be the public IP of the VM where the zone is hosted. This can be done by editing the zonengress (edit ingress object of zone1):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ kubectl -n kuma-system patch zoneingress "$(kubectl -n kuma-system get zoneingress -o=jsonpath='{.items[0].metadata.name}')" --type='json' -p='[{"op": "replace", "path": "/spec/networking/advertisedAddress", "value": "&amp;lt;publicIP-of-VM&amp;gt;"}]'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5.2:&lt;/strong&gt; Test the cross-zone connection:&lt;/p&gt;

&lt;p&gt;Open a shell prompt ('exec -it') inside a pod/deployment of zone1 and try to connect to services in zone2. Get the service addressPort of zone2 using the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get serviceinsight all-services-default -oyaml   ## (get the addressPort of requried zone 2service)

kubectl exec -it &amp;lt;zone1-workload-pod-name&amp;gt; sh 
curl http://&amp;lt;zone2-service-addressPort&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If curl is not found inside the pod, install it through apk update.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Congratulations! You have successfully deployed a multi-zone global control plane using Kuma and Kubernetes. With Kuma's powerful service mesh capabilities, you can manage and secure communication between services across multiple zones. Following the steps outlined in this article, you have learned how to set up the global control plane, connect zonal control planes and enable cross-zone communication. Explore further to leverage the full potential of Kuma and enhance the connectivity and security of your distributed applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more information visit:&lt;/strong&gt; &lt;a href="https://zelarsoft.com/" rel="noopener noreferrer"&gt;https://zelarsoft.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kong</category>
      <category>deployment</category>
      <category>kumamesh</category>
      <category>application</category>
    </item>
    <item>
      <title>Kong Hybrid Mode Deployment: GKE and On-Prem</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Tue, 14 May 2024 07:09:12 +0000</pubDate>
      <link>https://dev.to/zelar/kong-hybrid-mode-deployment-gke-and-on-prem-j32</link>
      <guid>https://dev.to/zelar/kong-hybrid-mode-deployment-gke-and-on-prem-j32</guid>
      <description>&lt;p&gt;Mastering Certificate Challenges with Ease&lt;/p&gt;

&lt;p&gt;By &lt;em&gt;Amrutha Paladugu&lt;/em&gt;&lt;br&gt;
Author LinkedIn: &lt;a href="https://www.linkedin.com/in/amrutha-paladugu/"&gt;https://www.linkedin.com/in/amrutha-paladugu/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kong Hybrid mode represents a groundbreaking approach to API management, merging the control plane (CP) and data plane (DP) capabilities. This mode offers many benefits that empower organizations to achieve enhanced control, security, and performance in their API ecosystem. In this article, we’ll delve into a real-world scenario showcasing the capabilities of Kong Hybrid mode. Specifically, we’ll explore the deployment of Kong Hybrid across Google Kubernetes Engine (GKE) and an On-Premise Kubernetes cluster. We will focus on achieving secure communication, certificate management, workload deployment, and external access. Join us as we navigate this journey through a hybrid API management deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfme30umjn7z8qtfiwde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfme30umjn7z8qtfiwde.png" alt="Image description" width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kong Hybrid architecture with one DP on the cloud and one DP on-premise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Certificates:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mutual Transport Layer Security (mTLS) plays a vital role in Kong’s security features by facilitating secure communication between services. When operating in hybrid mode, the authentication process relies on an mTLS handshake to ensure that communication between CP and DP nodes remains secure, requiring the presentation of certificates. Kong manages certificate key pairs in two distinct modes: Shared and PKI.&lt;/p&gt;

&lt;p&gt;In the Shared mode (the default setting), Kong CLI generates a certificate/key pair, and copies of this pair are then distributed across nodes. CP and DP nodes share and utilize this certificate/key pair.&lt;/p&gt;

&lt;p&gt;On the other hand, in the PKI mode, certificates signed by a central certificate authority (CA) are provided. Kong performs validation on both ends by verifying if they originate from the same CA. This approach effectively mitigates the risks associated with the transportation of private keys and provides increased security. If one of the DP nodes is compromised, an attacker won’t be able to affect other nodes in the Kong cluster.&lt;/p&gt;

&lt;p&gt;In this article, we will use PKI mode and generate three different cert/key pairs for CP and the 2 DPs. All three pairs need to be signed by the same CA discussed above.&lt;br&gt;
Additionally, we will provision a Let’s Encrypt certificate for DP1’s public-facing endpoint and verify encrypted traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Certificate generation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step1:&lt;/strong&gt; Generate CA cert using OpenSSL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step2:&lt;/strong&gt; Generate private key and CSR(certificate signing request) for CP and DPs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openssl req -new -newkey rsa:2048 -nodes -keyout cp-tls.key -out cp-tls.csr -subj "/CN=*.kong.example.com"
openssl req -new -newkey rsa:2048 -nodes -keyout dp1-tls.key -out dp1-tls.csr -subj "/CN=*.kong.example.com"
openssl req -new -newkey rsa:2048 -nodes -keyout dp2-tls.key -out dp2-tls.csr -subj "/CN=*.127.0.0.1.nip.io"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CN (Common Name) here would be your wildcard domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step3:&lt;/strong&gt; Use CA from Step1 to sign the generated CSRs from Step2&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openssl x509 -req -in cp-tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cp-tls.crt -days 365
openssl x509 -req -in dp1-tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dp1-tls.crt -days 365
openssl x509 -req -in dp2-tls.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dp2-tls.crt -days 365
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step4:&lt;/strong&gt; Create bundle certs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat cp-tls.crt ca.crt &amp;gt; cp-tls-bundle.crt
cat dp1-tls.crt ca.crt &amp;gt; dp1-tls-bundle.crt
cat dp2-tls.crt ca.crt &amp;gt; dp2-tls-bundle.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Save these certificates in an accessible directory (certs) for the CP and the DPs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install CP and DP1 on GKE:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connect to a GKE cluster and use the next set of commands to install CP and DP1.&lt;/p&gt;

&lt;p&gt;Create ns, Create secrets, update helm repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo snap install helm - classic
helm repo add kong https://charts.konghq.com
helm repo update
kubectl create namespace kong-cp
kubectl create namespace kong-dp1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create secrets for Kong Enterprise license, Session Config, Admin password, and Postgresql password:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create secret generic kong-enterprise-license -n kong-cp \
 - from-file=license=license.json \
 - dry-run=client -o yaml | kubectl apply -f -

kubectl create secret generic kong-session-config -n kong-cp \
 - from-literal=portal_session_conf='{"storage":"kong","secret":"super_secret_salt_string","cookie_name":"portal_session","cookie_samesite":"off","cookie_secure":false, "cookie_domain": ".example.com"}' \
 - from-literal=admin_gui_session_conf='{"cookie_name":"admin_session","cookie_samesite":"off","secret":"super_secret_salt_string","cookie_secure":false,"storage":"kong", "cookie_domain": ".example.com"}'

kubectl create secret generic kong-manager-password -n kong-cp \
 - from-literal=password=password

kubectl create secret generic kong-cp-postgresql -n kong-cp \
 - from-literal=host="enterprise-postgresql.kong.svc.cluster.local" \
 - from-literal=password=password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you don’t have access to an Enterprise license, you can still go ahead and try the installation but will not be able to access the Admin GUI.&lt;/p&gt;

&lt;p&gt;Now, create Kubernetes Secrets for the cluster cert and CA cert for ns kong-cp.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create secret tls kong-cluster-cert -n kong-cp \
 - cert=./certs/cp-tls-bundle.crt \
 - key=./certs/cp-tls.key

kubectl create secret generic kong-ca-cert -n kong-cp \
 - from-file=ca.crt=./certs/ca.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We use Helm to install the CP and DPs and use custom values.yaml files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update the values-cp.yaml with the below values:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;image:
  repository: kong/kong-gateway
  tag: "3.4"

secretVolumes:
  - kong-cluster-cert
  - kong-ca-cert

env:
  role: control_plane
  cluster_mtls: pki
  cluster_ca_cert: /etc/secrets/kong-ca-cert/ca.crt
  cluster_cert: /etc/secrets/kong-cluster-cert/tls.crt
  cluster_cert_key: /etc/secrets/kong-cluster-cert/tls.key
  nginx_http_ssl_protocols: TLSv1.2
  admin_gui_ssl_cert: /etc/secrets/kong-cluster-cert/tls.crt
  admin_gui_ssl_cert_key: /etc/secrets/kong-cluster-cert/tls.key
  admin_ssl_cert: /etc/secrets/kong-cluster-cert/tls.crt
  admin_ssl_cert_key: /etc/secrets/kong-cluster-cert/tls.key
  portal_gui_ssl_cert: /etc/secrets/kong-cluster-cert/tls.crt
  portal_gui_ssl_cert_key: /etc/secrets/kong-cluster-cert/tls.key
  portal_api_ssl_cert: /etc/secrets/kong-cluster-cert/tls.crt
  portal_api_ssl_cert_key: /etc/secrets/kong-cluster-cert/tls.key
  lua_ssl_verify_depth: 3
  admin_api_uri: https://admin.kong.example.com
  admin_gui_url: https://manager.kong.example.com
  portal_auth: basic-auth
  portal_api_url: https://portal-api.kong.example.com
  portal_gui_url: https://portal-dev.kong.example.com
  portal_gui_host: portal-dev.kong.example.com
  portal_gui_protocol: https
  database: postgres
  pg_host: kong-cp-postgresql
  pg_database: kong
  pg_user: postgres
  pg_schema: kong
  pg_password:
    valueFrom:
      secretKeyRef:
        name: kong-cp-postgresql
        key: password
  portal_session_conf:
    valueFrom:
      secretKeyRef:
        name: kong-session-config
        key: portal_session_conf
  user: kong
  password:
    valueFrom:
      secretKeyRef:
        name: kong-manager-password
        key: password

admin:
  enabled: true
  type: ClusterIP
  annotations:
    konghq.com/protocol: https
  labels: {}
  http:
    enabled: false
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8444
    parameters:
      - http2
  ingress:
    annotations:
      konghq.com/https-redirect-status-code: "301"
      nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    enabled: true
    ingressClassName: kong-dev
    hostname: admin.kong.example.com
    path: /
    tls: kong-cluster-cert

manager:
  enabled: true
  type: ClusterIP
  annotations:
    konghq.com/protocol: https
  labels: {}
  http:
    enabled: false
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8445
    parameters:
      - http2
  ingress:
    annotations:
      konghq.com/https-redirect-status-code: "301"
      nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    enabled: true
    ingressClassName: kong-dev
    hostname: manager.kong.example.com
    path: /
    tls: kong-cluster-cert

cluster:
  enabled: true
  type: LoadBalancer
  annotations: {}
  http:
    enabled: false
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8005
  ingress:
    annotations:
      konghq.com/https-redirect-status-code: "301"
      nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    enabled: true
    ingressClassName: kong-dev
    hostname: cp.kong.example.com
    path: /
    tls: kong-cluster-cert

clustertelemetry:
  enabled: true
  type: LoadBalancer
  http:
    enabled: false
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8006
  ingress:
    annotations:
      konghq.com/https-redirect-status-code: "301"
      nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    enabled: true
    ingressClassName: kong-dev
    hostname: tel.kong.example.com
    path: /
    tls: kong-cluster-cert

proxy:
  enabled: false

ingressController:
  enabled: true
  ingressClass: kong-dev
  resources:
    limits:
      cpu: 200m
      memory: 256Mi
    requests:
      cpu: 100m
      memory: 128Mi
  installCRDs: false
  env:
    publish_service: kong-dp/kong-dp-kong-proxy
    kong_admin_token:
      valueFrom:
        secretKeyRef:
          name: kong-manager-password
          key: password

enterprise:
  enabled: true
  license_secret: kong-enterprise-license # CHANGEME
  vitals:
    enabled: false
  rbac:
    enabled: true
    session_conf_secret: kong-session-config
    admin_api_auth: basic-auth
  portal:
    enabled: true
  smtp:
    enabled: false

portal:
  enabled: true
  type: ClusterIP
  annotations: 
    konghq.com/protocol: https
  labels: {}
  http:
    enabled: false
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8446
  ingress:
    annotations:
      konghq.com/https-redirect-status-code: "301"
      nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    enabled: true
    ingressClassName: kong-dev
    hostname: portal-dev.kong.example.com
    path: /
    tls: kong-cluster-cert

portalapi:
  enabled: true
  type: ClusterIP
  annotations: 
    konghq.com/protocol: https
  labels: {}
  http:
    enabled: false
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8447
  ingress:
    annotations:
      konghq.com/https-redirect-status-code: "301"
      nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    enabled: true
    ingressClassName: kong-dev
    hostname: portal-api.kong.example.com
    path: /
    tls: kong-cluster-cert

postgresql:
  enabled: true
  auth:
    database: kong
    username: postgres
    existingSecret: kong-cp-postgresql
    secretKeys:
      adminPasswordKey: password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Let’s try and understand the above values file:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The secrets we created, kong-cluster-cert and kong-ca-cert are mounted as volumes for the SSL certificates and are accessed at the specified path, for example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cluster_ca_cert: /etc/secrets/kong-ca-cert/ca.crt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The environment variables are for configuring Kong and its components. They control settings related to SSL/TLS, database connections, authentication, and more. Also, they specify the role as “control_plane” and enable cluster mutual TLS (mTLS) using the PKI method. The admin API and GUI URLs, authentication methods, and other configuration parameters are also defined using the env variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin, Manager, Portal, Portal API, and PostgreSQL:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These sections configure various components of Kong. All these components are enabled for the CP and would be disabled in the DP values yaml. Their type ( ClusterIP), TLS, and Ingress settings are also defined, including annotations, hostnames, paths, and TLS certificates for these components.&lt;/li&gt;
&lt;li&gt;PostgreSQL settings specify authentication details for connecting to the PostgreSQL database used by Kong.&lt;/li&gt;
&lt;li&gt;Enterprise-related settings include the license secret, RBAC configuration, SMTP, and vitals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Proxy and Ingress Controller:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The proxy section specifies whether the Kong proxy is enabled. For CP values, this would be disabled as the DP does all the proxying.&lt;/li&gt;
&lt;li&gt;Ingress Controller settings define the resources and environment variables for the Kong Ingress Controller.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cluster and Cluster Telemetry:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cluster and cluster telemetry are essential for Kong Gateway’s Control Plane (CP) and Data Plane (DP) connection. DP instances connect to the CP through the CP cluster, which provides redundancy, load balancing, and configuration synchronization.&lt;/li&gt;
&lt;li&gt;Cluster telemetry plays a crucial role in monitoring the health of both CP and DP components, ensuring they can work together effectively and respond to changes and issues in real time. This setup provides a reliable and resilient CP-DP connection in Kong Gateway deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Install the CP:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;helm upgrade - install kong-cp kong/kong - namespace kong-cp -f values-cp.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the CP is installed, verify that all pods are running and the Cluster and Clusterterlemetry services’ external LoadBalancer IPs are ready.&lt;/p&gt;

&lt;p&gt;To install DP in the same cluster, follow the steps below and create license and certificate secrets for DP1.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create secret generic kong-enterprise-license -n kong-dp1 \
  --from-file=license=license.json \
  --dry-run=client -o yaml | kubectl apply -f -

kubectl create secret tls kong-cluster-cert -n kong-dp1 \
 - cert=./certs/dp1-tls-bundle.crt \
 - key=./certs/dp1-tls.key

kubectl create secret generic kong-ca-cert -n kong-dp1 \
 - from-file=ca.crt=./certs/ca.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To encrypt the oneway traffic to the public-facing end point of DP1, we use Let’s Encrypt CA. Use the below link to generate one for the domain you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSL Certificate Generator: Free letsencrypt SSL in minutes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A free SSL Certificate Generator. No login is required. Secure your site with a letsencrypt certificate. Includes a…&lt;br&gt;
punchsalad.com&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a secret for this cert in the kong-dp1 namespace:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create secret tls kong-tls-cert -n kong-dp1 \
 - cert=./letsencrypt/ca.crt \
 - key=./letsencrypt/ca.key
Create a values-dp1.yaml file with the below values:
image:
  repository: kong/kong-gateway
  tag: "3.4"

secretVolumes:
  - kong-cluster-cert
  - kong-ca-cert
  - kong-tls-cert

env:
  role: data_plane
  database: "off"
  status_listen: 0.0.0.0:8100
  cluster_control_plane: cp.kong.example.com:443
  cluster_telemetry_endpoint: tel.kong.example.com:443
  cluster_mtls: pki
  cluster_server_name: cp.kong.example.com
  cluster_telemetry_server_name: tel.kong.example.com
  lua_ssl_verify_depth: 3
  cluster_ca_cert: /etc/secrets/kong-ca-cert/ca.crt
  lua_ssl_trusted_certificate: /etc/secrets/kong-cluster-cert/tls.crt
  cluster_cert: /etc/secrets/kong-cluster-cert/tls.crt
  cluster_cert_key: /etc/secrets/kong-cluster-cert/tls.key
  ssl_cert: /etc/secrets/kong-tls-cert/tls.crt
  ssl_cert_key: /etc/secrets/kong-tls-cert/tls.key

ingressController:
  enabled: false

enterprise:
  enabled: true
  license_secret: kong-enterprise-license
  vitals:
    enabled: false
  portal:
    enabled: false
  rbac:
    enabled: false

admin:
  enabled: false

manager:
  enabled: false

portal:
  enabled: false

portalapi:
  enabled: false

proxy:
  enabled: true
  type: LoadBalancer
  annotations: {}
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8443
    parameters:
      - http2
  # stream: {}
  ingress:
    enabled: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please take note of the key differences here from the earlier values-cp yaml. All the Manager, Admin, Portal, Portalapi, and IngressController sections are disabled, while the Proxy section is enabled as type LoadBalancer. As explained earlier, ensuring the correct configuration of cluster and cluster telemetry endpoints is crucial.&lt;/p&gt;

&lt;p&gt;Another point worth mentioning is the secret volume for the Let’s Encrypt certificate:kong-tls-cert. This is accessed through the below variables:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssl_cert: /etc/secrets/kong-tls-cert/tls.crt&lt;br&gt;
ssl_cert_key: /etc/secrets/kong-tls-cert/tls.key&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install DP1:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;helm upgrade --install kong-dp1 kong/kong --namespace kong-dp1 -f values-dp1.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0ant8a1rw2ap6ibwf20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0ant8a1rw2ap6ibwf20.png" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1qhap0mufketts7ynxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1qhap0mufketts7ynxw.png" alt="Image description" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note the LoadBalancer IPs for the Cluster and Clustertelemetry service in the CP and the Proxy service in the DP. Map these values to the domain you intend to use. In our scenario, it would be as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp.kong.example.com - - - - - - - &amp;gt; 34.136.32.39

cp-tel.kong.example.com - - - - &amp;gt;34.68.58.255

*.kong.example.com - - - - - - - - &amp;gt;34.132.64.159
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should now be able to access Kong Manager (in case you are using an Enterprise license) at manager.kong.example.com, but the browser won’t recognize the OpenSSL CA, and hence it will appear as NotSecure as shown in the below image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwq3vxy78r3unomd3ihf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwq3vxy78r3unomd3ihf.png" alt="Image description" width="800" height="406"&gt;&lt;/a&gt;Access Admi GUI and view certificate (Not Secure- openSSL)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy a sample application:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s deploy a sample nodeJS application in the same GKE cluster in the default namespace, try accessing it through the DP endpoint, and see if the Let’s Encrypt certificate is served.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create deploy --image debianmaster/nodejs-welcome welcome 
kubectl expose deployment welcome --type=LoadBalancer --name=welcome --port=8080 --target-port=8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27etp61294hnpacz9e3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27etp61294hnpacz9e3q.png" alt="Image description" width="800" height="189"&gt;&lt;/a&gt;&lt;br&gt;
Deploying a sample nodeJS ‘welcome’ application&lt;/p&gt;

&lt;p&gt;Add a service and a route to this application through the Kong manager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8pgjkbotkankljkckcb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8pgjkbotkankljkckcb.png" alt="Image description" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, the workload can be accessed through dp1.kong.example.com/welcome. Click on the lock icon🔒present right before the URL and view the certificate. You will notice that the Let’s Encrypt certificate is being served, as shown in the below image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbaoebqz4aop5sunj4olu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbaoebqz4aop5sunj4olu.png" alt="Image description" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Access the workload through the DP endpoint and verify the Let’s Encrypt cert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install DP2 on local K3s:&lt;/strong&gt;\&lt;/p&gt;

&lt;p&gt;Connect to a local K3s (lightweight Kubernetes) cluster and install the following command set to install DP2.&lt;br&gt;
Create namespace for DP2&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl create ns kong-dp2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create secrets for enterprise licenses and certificates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create secret generic kong-enterprise-license - from-file=license=./license.json -n kong-dp2 - dry-run=client -o yaml | kubectl apply -f -

kubectl create secret tls kong-cluster-cert -n kong-dp2 \
 - cert=./certs/dp2-tls-bundle.crt \
 - key=./certs/dp2-tls.key

kubectl create secret generic kong-ca-cert -n kong-dp2 \
 - from-file=ca.crt=./certs/ca.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create a values-dp2.yaml file with the below values:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;image:
  repository: kong/kong-gateway
  tag: "3.4"

secretVolumes:
  - kong-cluster-cert
  - kong-ca-cert

env:
  role: data_plane
  cluster_control_plane: cp.kong.example.com:443
  cluster_telemetry_endpoint: tel.kong.example.com:443
  lua_ssl_trusted_certificate: /etc/secrets/kong-cluster-cert/tls.crt
  cluster_mtls: pki
  cluster_server_name: cp.kong.example.com
  cluster_telemetry_server_name: tel.kong.example.com
  cluster_ca_cert: /etc/secrets/kong-ca-cert/ca.crt
  cluster_cert: /etc/secrets/kong-cluster-cert/tls.crt
  cluster_cert_key: /etc/secrets/kong-cluster-cert/tls.key
  database: "off"
  audit_log: "on"
  headers: "off" 
  anonymous_reports: "off"
  untrusted_lua: "off"

enterprise:
  enabled: true
  license_secret: kong-enterprise-license
  vitals:
    enabled: false
  portal:
    enabled: false
  rbac:
    enabled: false
admin:
  enabled: false
manager:
  enabled: false
portal:
  enabled: false
portalapi:
  enabled: false
ingressController:
  enabled: false

proxy:
  enabled: true
  type: LoadBalancer
  annotations: {
    konghq.com/protocol: "https"
  }
  tls:
    enabled: true
    servicePort: 443
    containerPort: 8443
    parameters:
    - http2
  ingress:
    enabled: true
Install DP2
helm upgrade - install kong-dp2 kong/kong - namespace kong-dp2 -f values-dp2.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Deploy a sample application in the K3s cluster:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s deploy a sample nodeJS application in the same K3s cluster in the default namespace and try to access it through the DP2 endpoint and verify.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create deploy --image debianmaster/nodejs-welcome hello 
kubectl expose deployment hello --type=LoadBalancer --name=hello --port=8080 --target-port=8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopkt4xexqjmqh4sjsxlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopkt4xexqjmqh4sjsxlg.png" alt="Image description" width="800" height="191"&gt;&lt;/a&gt;&lt;br&gt;
Verify deployment of nodeJS ‘hello’ application.&lt;/p&gt;

&lt;p&gt;Add a service and a route to this application through the Kong manager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfaczaq4spy4n2f4v358.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfaczaq4spy4n2f4v358.png" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the workload can be accessed through dp2.127.0.0.1.nip.io/hello&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8m8uz4yn9pwrmf1kr8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8m8uz4yn9pwrmf1kr8p.png" alt="Image description" width="800" height="268"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Throughout this article, we embarked on a journey to uncover the transformative power of Kong Hybrid mode within API management. By harmonizing the control plane (CP) and data plane (DP), Kong Hybrid empowers organizations to balance control, security, and performance seamlessly. Through a real-world scenario, we showcased the deployment of Kong Hybrid across Google Kubernetes Engine (GKE) and an On-Premise Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;We navigated the intricate landscape of certificate management, emphasizing the pivotal role of Mutual Transport Layer Security (mTLS) and certificates in fortifying Kong’s security architecture. By embracing PKI mode, we ensured secure communication and mitigated the risks inherent in key transportation.&lt;/p&gt;

&lt;p&gt;By following our straightforward, step-by-step instructions, we achieved successful deployments of Kong CP and DP1 within the GKE cluster, followed by Kong DP2 in an On-Premise K3s cluster. We highlighted the deployment of sample applications, demonstrated access through DP endpoints, and verified Let’s Encrypt certificates, reinforcing the foundation of a robust and secure API ecosystem.&lt;/p&gt;

&lt;p&gt;As we wrap up this journey, remember the importance of resource cleanup to prevent lingering costs. The world of Kong Hybrid mode introduces a revolutionary approach that bridges the gap between Cloud and On-Premise, enabling the creation of APIs that transcend traditional confines. With mastery of this approach, you’ll confidently and innovatively navigate the dynamic realm of modern API management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more details visit:&lt;/strong&gt; [&lt;a href="https://zelarsoft.com/kong-consulting-and-licensing/"&gt;https://zelarsoft.com/kong-consulting-and-licensing/&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>kong</category>
      <category>deployment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Streamlining Microservices Orchestration: A Guide to Deploying Kong-Mesh Zones with Konnect</title>
      <dc:creator>Zelar</dc:creator>
      <pubDate>Thu, 02 May 2024 07:32:38 +0000</pubDate>
      <link>https://dev.to/zelar/streamlining-microservices-orchestration-a-guide-to-deploying-kong-mesh-zones-with-konnect-mg</link>
      <guid>https://dev.to/zelar/streamlining-microservices-orchestration-a-guide-to-deploying-kong-mesh-zones-with-konnect-mg</guid>
      <description>&lt;p&gt;&lt;em&gt;By Amrutha Paladugu&lt;/em&gt;&lt;br&gt;
Author LinkedIn: &lt;a href="https://www.linkedin.com/in/amrutha-paladugu/"&gt;https://www.linkedin.com/in/amrutha-paladugu/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this blog post, we will explore the deployment of Kong-Mesh zones using Kong’s Konnect platform. Kong-Mesh provides a powerful service mesh solution for managing and orchestrating microservices. By leveraging Konnect, users can easily set up and configure global control planes, connect zones, and deploy applications within the mesh.&lt;/p&gt;

&lt;p&gt;To get started, sign up for a free account at &lt;a href="https://cloud.konghq.com/"&gt;https://cloud.konghq.com/&lt;/a&gt; and receive $500 worth of free credits. After logging in, navigate to the Mesh Manager in the Konnect UI, where you can manage global control planes for Kong-Mesh. Figure 1 shows the screenshot of Mesh Manager which already has one global control plane meshcp&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadekwfjuvo3wfyar6qng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadekwfjuvo3wfyar6qng.png" alt="Image description" width="800" height="245"&gt;&lt;/a&gt;Figure 1: Mesh Manager on Konnect UI&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating Global Control Plane:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Begin by creating a new global control plane in the Mesh Manager. Specify a name and optional label, then save the configuration. This control plane will serve as the central hub for managing and controlling your mesh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Kumactl:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For this blog, we are deploying everything on a local K3s cluster but Kong-Mesh zones can be deployed onto any non-kubernetes environment as well. To interact with the Kong-Mesh from your local machine, install kumactl. Follow the provided shell commands to install and verify the version. This step ensures that you can configure kumactl to work with your Kong-Mesh deployment.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -L https://docs.konghq.com/mesh/installer.sh | VERSION=2.6.1 sh -&lt;br&gt;
cd kong-mesh-2.6.1/bin&lt;br&gt;
export PATH=$(pwd):$PATH&lt;br&gt;
cd ../..&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Verify the installation using the below command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kumactl version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The output would be something like in Figure 2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7i7ba4rh94f2jmwjc90o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7i7ba4rh94f2jmwjc90o.png" alt="Image description" width="623" height="100"&gt;&lt;/a&gt;Figure 2: Checking the kumactl version installed&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuring Kumactl with Konnect:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the Konnect UI Mesh Manager, go to your global control plane, click on Global Control Plane Actions, and further configure kumactl. This involves creating a Konnect Personal Access Token (PAT) and following the provided steps (refer to figures 3 &amp;amp; 4). Once configured, kumactl will be set up on your local machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famdorhqbu6iz0958is3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famdorhqbu6iz0958is3l.png" alt="Image description" width="800" height="351"&gt;&lt;/a&gt; Figure 3.1: Demonstration of configuring kumactl&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07rm67qi8guzedc2jbn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07rm67qi8guzedc2jbn6.png" alt="Image description" width="800" height="297"&gt;&lt;/a&gt; Figure 3.2: Steps to configure kumactl&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvrcvzrnol40jadkyghj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvrcvzrnol40jadkyghj.png" alt="Image description" width="800" height="309"&gt;&lt;/a&gt; Figure 4: Creating a PAT&lt;/p&gt;

&lt;p&gt;Use this PAT and run the next steps to complete the kumactl configuration. Once it is done, you will see the output as shown in Figure 5.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1zpxv8hyj9vb36swnnu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1zpxv8hyj9vb36swnnu.png" alt="Image description" width="800" height="91"&gt;&lt;/a&gt; Figure 5: kumactl configured in your local k3s cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating and Connecting Zones:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Proceed to create a zone within the Mesh Manager. Within your global cp, click on the Create Zone button, and name it appropriately. Follow the steps (presented to you on the UI) to generate a token and install the mesh with the presented values. Upon successful completion, the zone will be created and online, ready for use. Refer to figures 6, 7 &amp;amp; 8.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmefnl0e921ngxe33tp4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmefnl0e921ngxe33tp4p.png" alt="Image description" width="800" height="222"&gt;&lt;/a&gt; Figure 6: Create Zone&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzw64cz11k5m2xkfmx3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzw64cz11k5m2xkfmx3s.png" alt="Image description" width="800" height="586"&gt;&lt;/a&gt; Figure 7: Create and connect the Zone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2xt5rq9e8l6bz9wldke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2xt5rq9e8l6bz9wldke.png" alt="Image description" width="800" height="146"&gt;&lt;/a&gt; Figure 8: Zone is created and is online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploying a Sample Application:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To showcase Kong-Mesh in action, deploy a sample hello-world application within the mesh. The provided Kubernetes deployment and service YAML files include creating a new namespace and enabling sidecar injection. (Note: You may choose to deploy any other app in place of the nodjes image I used in this yaml). Apply these configurations using kubectl, and verify the successful deployment in the Konnect UI Mesh Manager.&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;apiVersion: v1&lt;br&gt;
kind: Namespace&lt;br&gt;
metadata:&lt;br&gt;
  name: hello-world&lt;br&gt;
  labels:&lt;br&gt;
    kuma.io/sidecar-injection: enabled&lt;br&gt;
&lt;/code&gt;---&lt;br&gt;
&lt;code&gt;apiVersion: apps/v1&lt;br&gt;
kind: Deployment&lt;br&gt;
metadata:&lt;br&gt;
  name: hello-world&lt;br&gt;
  namespace: hello-world&lt;br&gt;
spec:&lt;br&gt;
  replicas: 1&lt;br&gt;
  selector:&lt;br&gt;
    matchLabels:&lt;br&gt;
      app: hello-world&lt;br&gt;
  template:&lt;br&gt;
    metadata:&lt;br&gt;
      labels:&lt;br&gt;
        app: hello-world&lt;br&gt;
    spec:&lt;br&gt;
      containers:&lt;br&gt;
        - name: hello-world&lt;br&gt;
          image: pamrutha88/hello-world-nodejs:latest #use a choice of your app image in-place of this image&lt;br&gt;
          ports:&lt;br&gt;
            - containerPort: 8080&lt;br&gt;
&lt;/code&gt;---&lt;br&gt;
&lt;code&gt;&lt;br&gt;
apiVersion: v1&lt;br&gt;
kind: Service&lt;br&gt;
metadata:&lt;br&gt;
  name: hello-world&lt;br&gt;
  namespace: hello-world&lt;br&gt;
spec:&lt;br&gt;
  selector:&lt;br&gt;
    app: hello-world&lt;br&gt;
  ports:&lt;br&gt;
    - protocol: TCP&lt;br&gt;
      port: 80&lt;br&gt;
      targetPort: 8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save and apply this yaml using the below command:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl apply -f hello-world.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the deployment is complete, verify that the pods are running and once that’s done, we can view this service in the Konnect UI Mesh Manager as shown in Figure 9.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frejz0x0wfqr26cdcm161.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frejz0x0wfqr26cdcm161.png" alt="Image description" width="800" height="413"&gt;&lt;/a&gt; Figure 9: Example deployed service within the zone.&lt;/p&gt;

&lt;p&gt;If you click on the Data Plane Proxies, you can observe that under Certificate Info there is no certificate issued yet. This is because we have not enabled mTLS on this mesh which can be done using the below yaml.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;name: default&lt;br&gt;
type: Mesh&lt;br&gt;
mtls:&lt;br&gt;
  enabledBackend: ca-1&lt;br&gt;
  backends:&lt;br&gt;
name: ca-1&lt;br&gt;
    type: builtin&lt;br&gt;
networking:&lt;br&gt;
  outbound:&lt;br&gt;
    passthrough: true&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save this into mesh.yaml file and apply using the below command:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kumactl apply -f mesh.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can see that the changes are reflected in the Konnect immediately, refer to Figure 10.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t3cpdzg531jpq9ftqtd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t3cpdzg531jpq9ftqtd.png" alt="Image description" width="800" height="380"&gt;&lt;/a&gt; Figure 10: Built-in certificates issued by Kong-Mesh&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With Kong-Mesh and Konnect, deploying and managing service meshes becomes a streamlined process. The integration of global control planes, zones, and kumactl configuration provides a comprehensive solution for orchestrating microservices in a scalable and efficient manner. Explore the capabilities of Kong-Mesh through Konnect and witness the seamless deployment of applications within the mesh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more details visit:&lt;/strong&gt; [&lt;a href="https://zelarsoft.com/kong-consulting-and-licensing/"&gt;https://zelarsoft.com/kong-consulting-and-licensing/&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>kong</category>
      <category>api</category>
    </item>
  </channel>
</rss>
