1. Using kubernetes apps.emqx.io with risingwave.risingwavelabs.com

    TypeScript

    To use Kubernetes with apps.emqx.io and risingwave.risingwavelabs.com, you may be attempting to deploy applications using EMQ X and RisingWave, which are Cloud Native Computing Foundation (CNCF) projects for messaging in IoT (EMQ X) and real-time analytics (RisingWave) on Kubernetes.

    To accomplish this, we can create a Pulumi program that would set up a Kubernetes cluster and deploy these applications. You would typically deploy these applications as Deployments with associated Services for network access. An Ingress could be used if you need to expose these services to the internet.

    I’ll guide you through the creation of a Pulumi TypeScript program providing infrastructure code to:

    • Create a Kubernetes Deployment for apps.emqx.io (EMQ X).
    • Create a Kubernetes Deployment for risingwave.risingwavelabs.com (RisingWave).
    • Expose each application using Kubernetes Service objects.
    • Optionally, set up Ingress objects if you need to expose your applications outside of the Kubernetes cluster on custom domains.

    Please note that you must have Pulumi CLI installed, access to a Kubernetes cluster, and have your Kubernetes context correctly set in your local development environment for the following code to work.

    Below is an outline on how you can structure your Pulumi program using TypeScript:

    import * as k8s from "@pulumi/kubernetes"; // Define the configuration values for the EMQ X deployment. const emqxAppLabels = { app: "emqx" }; const emqxDeployment = new k8s.apps.v1.Deployment("emqx-deployment", { metadata: { labels: emqxAppLabels }, spec: { replicas: 1, selector: { matchLabels: emqxAppLabels }, template: { metadata: { labels: emqxAppLabels }, spec: { containers: [{ name: "emqx", image: "emqx/emqx:latest", // Specify the correct image for emqx ports: [{ name: "mqtt-port", containerPort: 1883 }], }], }, }, }, }); // Expose EMQ X Deployment as a Service. const emqxService = new k8s.core.v1.Service("emqx-service", { metadata: { labels: emqxAppLabels }, spec: { ports: [{ name: "mqtt-port", port: 1883 }], selector: emqxAppLabels, }, }); // Define the configuration values for the RisingWave deployment. const risingWaveAppLabels = { app: "risingwave" }; const risingWaveDeployment = new k8s.apps.v1.Deployment("risingwave-deployment", { metadata: { labels: risingWaveAppLabels }, spec: { replicas: 1, selector: { matchLabels: risingWaveAppLabels }, template: { metadata: { labels: risingWaveAppLabels }, spec: { containers: [{ name: "risingwave", image: "risingwavelabs/risingwave:latest", // Specify the correct image for RisingWave ports: [{ name: "http-port", containerPort: 4567 }], }], }, }, }, }); // Expose RisingWave Deployment as a Service. const risingWaveService = new k8s.core.v1.Service("risingwave-service", { metadata: { labels: risingWaveAppLabels }, spec: { ports: [{ name: "http-port", port: 4567 }], selector: risingWaveAppLabels, }, }); // Export the services' cluster IP addresses and other properties you need to access externally. export const emqxClusterIP = emqxService.spec.clusterIP; export const risingWaveClusterIP = risingWaveService.spec.clusterIP;

    This basic Pulumi program will deploy both EMQ X and RisingWave as Kubernetes Deployments and expose them with Services. If you need to expose these applications on specific domains, you'll need to create Kubernetes Ingress resources and ensure you've got an Ingress controller set up within your Kubernetes cluster.

    Remember to replace the image URLs with the specific version you intend to use and any other configuration that you might need for your deployments, like resources requests/limits, environment variables, etc.

    Please note that proper handling of networking, persistent storage, handling secrets, and other production considerations are not covered here and should be managed according to your specific application requirements and best practices.

    Do remember to apply this Pulumi code using the following commands on your terminal:

    • pulumi up to create or update resources.
    • pulumi destroy to clean up resources.
    • pulumi stack to manage stack configurations like environments.