{"id":8086,"date":"2020-03-10T03:51:06","date_gmt":"2020-03-10T08:51:06","guid":{"rendered":"https:\/\/sterling.com\/?p=8086"},"modified":"2020-03-10T03:51:06","modified_gmt":"2020-03-10T08:51:06","slug":"cloud-native-development-on-prem-networking","status":"publish","type":"post","link":"https:\/\/sterling.com\/stargazer\/?p=8086","title":{"rendered":"Cloud Native Development On-Prem &#8211; Networking"},"content":{"rendered":"<p>Written By Billy Downing<\/p>\n<h2><span style=\"font-size: 12pt;\">Cloud Native Application Architecture<\/span><\/h2>\n<p>As previously discussed in Cloud Native Development On-Prem \u2013 Container Orchestration, our application is now broken into separate, independently ran services residing within containers and deployed by Kubernetes. However now that our application is broken into micro services, we need to build a fabric for them to communicate. Kubernetes provides a standardized interface to translate objects into tangible network infrastructure referred to as the Container Network Interface (CNI). In our use-case we will utilize NSX-T 2.5.1 as the network and security fabric for both our infrastructure nodes (Kubernetes masters and workers) as well as the application pods themselves.<\/p>\n<p><span style=\"font-size: 12pt;\">Goal: <\/span>Utilize NSX-T to create a dynamic network fabric to support our Kubernetes workloads while providing security, routing, overlay, visibility, NAT, and load balancing services.<\/p>\n<h2><span style=\"font-size: 12pt;\">What is NSX-T, and how does it Provide Value<\/span><\/h2>\n<p>VMware\u2019s NSX-T is a software defined networking solution which defines all objects in code rather than physical equipment. Firewalling, routing, load balancing, NAT, and monitoring can all be done using NSX-T for container workloads as well as traditional virtual machine and even physical boxes.<\/p>\n<p>Kubernetes allows developers and operators to package the infrastructure required to run an app within the application deployment manifest itself. For example, while an application may have a web server in front, typically a load balancer is deployed to proxy traffic and distribute as necessary. \u00a0In addition, firewall rules are put in place to protect the application, and backend storage is provisioned for persistent data. In a traditional environment, each one of these components would be provisioned independently and not as a cohesive unit of deployment. With NSX-T adherence to Kubernetes CNI we can dynamically provision infrastructure during application deployment time. Explained further when visualizing the solution, NSX-T is able to abstract a physical data center and provide all the connectivity and services required to deploy a successful production-grade application dynamically and repeatedly through code.<\/p>\n<p><span style=\"font-size: 12pt;\">The ability to dynamically instantiate network objects is paramount when creating test environments quickly for code deployments. As part of the CI\/CD process, when code is checked in, compiled, pushed, and pulled back down it must be placed in a temporary environment to undergo application testing before being pushed to production. NSX-T allows developers to quickly consume network resources which mimic that of production allowing them to feel confident in their stage environment for application testing.<\/span><\/p>\n<h2><span style=\"font-size: 12pt;\">Visualize the Solution<\/span><\/h2>\n<p><span style=\"font-size: 12pt;\">Using a map built out within vRealize Network Insight we can visualize the objects created within NSX-T by our Kubernetes manifest. Figure 1 is a depiction of the gofigure-fe service portraying the connection to the T0 router providing north\/south routing, the T1 routing for east\/west, NAT, and hosting the loadbalancer, as well as the various logical switch ports associated with the overlay segments all trailing back to the three deployed pods within the gofigure-fe ReplicaSet.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-full wp-image-8087\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-1.png\" alt=\"\" width=\"975\" height=\"1011\" \/>Figure 1<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">From the K8\u2019s Perspective, our app is simply made up of a front-end web server and back-end key-value database tied to persistent volume over NFS. Figure 1 is an output of all the object currently created to support our application in the prod-cluster environment. In this output we can see five pods running (three web-tier and two DB tier), two services (one type Cluster and another type Loadbalancer), and the associated deployments and ReplicSets all within the default namespace of the K8\u2019s cluster.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-8088\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-2.png\" alt=\"\" width=\"975\" height=\"503\" \/>Figure 2<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">We can relate this infrastructure to our NSX-T environment as shown in the below series of figures the associated overlay segment, T1 router, and LoadBalancer VIP matching the IP and port allocated within the K8\u2019s cluster, 8081 and 10.150.29.200 respectively.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">Figure 3 displays the overlay segment associated with the default namespace on our cluster where we can see each pod physically connecting to the fabric (3 gofigure-fe, 2 gofigure-redis containers).<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-8089\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-3.png\" alt=\"\" width=\"975\" height=\"447\" \/>Figure 3<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">Moving up the stack, we can see in Figure 4 the T1 router providing services (hosting the load balancer, NAT, and route redistribution) for our application, all dynamically created by Kubernetes using the NSX-T Container Plugin (NCP) via the Container Networking Interface (CNI). Each cluster is allocated a T1 \u2018cluster-router\u2019 which hosts the loadbalancer and necessary VIPs, conducts all required NAT, east\/west routing, and any other services<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8090\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-4.png\" alt=\"\" width=\"975\" height=\"419\" \/>Figure 4<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">Within the T1 cluster router there resides a cluster loadbalancer used to instantiate services of type load balancer, ingress controllers, and provide master node resiliency. In Figures 5 and 6 take note of the gofigure-fe virtual server (layer 4), cluster virtual-server (layer 4), and Ingress controller http ruleset (layer 7).<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8091\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-6.png\" alt=\"\" width=\"975\" height=\"437\" \/>Figure 6<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">Figure 7 shows the load balancer forwarding rules created by Kubernetes as an ingress controller.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8092\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-7.png\" alt=\"\" width=\"975\" height=\"356\" \/>Figure 7<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">NSX-T also provides security at the logical interface (container) level via distributed firewall rules which can be instantiated and applied to containers based on tags during deployment. Figure 8 shows a series of firewall rules created by Enterprise PKS during deployment, and Figure 9 displays rules created previously by a higher tier security team which show the newly created containers falling into the rulesets based on pod tags.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8093\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-8.png\" alt=\"\" width=\"975\" height=\"321\" \/>Figure 8<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8094\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-9.png\" alt=\"\" width=\"975\" height=\"118\" \/>Figure 9<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">The intent of the firewalling method by set in the \u2018Security-Top\u2019 section is to define rules where workloads will dynamically have applied based on their tags. In this example, a security team has created rules to drop traffic from a dev environment to a prod environment and vice versa. The basis of membership is on tags, so a pods tagged with scope: env tag: prod will fall into the default.prod group while a pod tagged with scope: env tag: dev will fall into the dev group. Once deployed, these pods will be grouped into their respective environment and have traffic blocked between. Figure 10 shows the breakdown of membership for the default.prod group, which shows 5 IP\u2019s and 5 logical ports (pods) making up the 5 production pods deployed for our application. The same is true for the dev environment which is also deployed.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8095\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-10.png\" alt=\"\" width=\"975\" height=\"955\" \/>Figure 10<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">To confirm firewalls rules are working as expected, NSX-T offers a TraceFlow tool which generates synthetic traffic based on source and destination workloads and maps out the topology as its traversed. In Figure 11 we can see traffic between a source pod in prod, and a destination pod in dev is blocked by the pre-created firewall rules in place. If we remove that rule (shown in Figure 9) and attempt the TraceFlow again, traffic will be successful as shown in Figure 12.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8096\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-11.png\" alt=\"\" width=\"975\" height=\"474\" \/>Figure 11<\/span><\/p>\n<p><span style=\"font-size: 12pt;\">Figure 12 shows a successful traffic flow between the same source and destination after the rule was set to \u201cAllow\u201d by the security team.<\/span><\/p>\n<p><span style=\"font-size: 12pt;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8097\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-12.png\" alt=\"\" width=\"975\" height=\"538\" \/>Figure 12<\/span><\/p>\n<h2><span style=\"font-size: 12pt;\">In the End<\/span><\/h2>\n<p><span style=\"font-size: 12pt;\">NSX-T provides networking capabilities with Kubernetes at the helm. Due to the software defined nature, we are able to dynamically create and destroy objects within NSX-T to support workloads in a programmatic way allowing for a repeatable pipeline process for testing and deploying out code through the below pipeline. NSX-T not only ties together the container networking, but also supports network and services requirements for the virtual machine based infrastructure.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8098\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2020\/03\/N-13.png\" alt=\"\" width=\"975\" height=\"534\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Written By Billy Downing Cloud Native Application Architecture As previously discussed in Cloud Native Development On-Prem \u2013 Container Orchestration, our application is now broken into separate, independently ran services residing [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":8099,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,14,15,16,17],"tags":[],"class_list":["post-8086","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-cloud","category-data-center","category-managed-services","category-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cloud Native Development On-Prem - Networking - Sterling<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloud Native Development On-Prem - Networking - Sterling\" \/>\n<meta property=\"og:description\" content=\"Written By Billy Downing Cloud Native Application Architecture As previously discussed in Cloud Native Development On-Prem \u2013 Container Orchestration, our application is now broken into separate, independently ran services residing [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sterling.com\/stargazer\/?p=8086\" \/>\n<meta property=\"og:site_name\" content=\"Sterling\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/SterlingComp\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-10T08:51:06+00:00\" \/>\n<meta name=\"author\" content=\"Sterling\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sterlingcomp\" \/>\n<meta name=\"twitter:site\" content=\"@sterlingcomp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sterling\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086\"},\"author\":{\"name\":\"Sterling\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/person\\\/b812a18f3a1e77cd0925429d1546e49d\"},\"headline\":\"Cloud Native Development On-Prem &#8211; Networking\",\"datePublished\":\"2020-03-10T08:51:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086\"},\"wordCount\":1153,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086#primaryimage\"},\"thumbnailUrl\":\"\",\"articleSection\":[\"Blog\",\"Cloud\",\"Data Center\",\"Managed Services\",\"Security\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086\",\"name\":\"Cloud Native Development On-Prem - Networking - Sterling\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086#primaryimage\"},\"thumbnailUrl\":\"\",\"datePublished\":\"2020-03-10T08:51:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086#primaryimage\",\"url\":\"\",\"contentUrl\":\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=8086#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cloud Native Development On-Prem &#8211; Networking\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#website\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/\",\"name\":\"Sterling\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#organization\",\"name\":\"Sterling\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Sterling-Computers-Logo-TM.png\",\"contentUrl\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Sterling-Computers-Logo-TM.png\",\"width\":399,\"height\":145,\"caption\":\"Sterling\"},\"image\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"http:\\\/\\\/facebook.com\\\/SterlingComp\\\/\",\"https:\\\/\\\/x.com\\\/sterlingcomp\",\"https:\\\/\\\/www.instagram.com\\\/sterlingcomputers\\\/\",\"http:\\\/\\\/youtube.com\\\/@sterlingcomp\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sterling-computers\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/person\\\/b812a18f3a1e77cd0925429d1546e49d\",\"name\":\"Sterling\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g\",\"caption\":\"Sterling\"},\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?author=2\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cloud Native Development On-Prem - Networking - Sterling","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Cloud Native Development On-Prem - Networking - Sterling","og_description":"Written By Billy Downing Cloud Native Application Architecture As previously discussed in Cloud Native Development On-Prem \u2013 Container Orchestration, our application is now broken into separate, independently ran services residing [&hellip;]","og_url":"https:\/\/sterling.com\/stargazer\/?p=8086","og_site_name":"Sterling","article_publisher":"http:\/\/facebook.com\/SterlingComp\/","article_published_time":"2020-03-10T08:51:06+00:00","author":"Sterling","twitter_card":"summary_large_image","twitter_creator":"@sterlingcomp","twitter_site":"@sterlingcomp","twitter_misc":{"Written by":"Sterling","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sterling.com\/stargazer\/?p=8086#article","isPartOf":{"@id":"https:\/\/sterling.com\/stargazer\/?p=8086"},"author":{"name":"Sterling","@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/person\/b812a18f3a1e77cd0925429d1546e49d"},"headline":"Cloud Native Development On-Prem &#8211; Networking","datePublished":"2020-03-10T08:51:06+00:00","mainEntityOfPage":{"@id":"https:\/\/sterling.com\/stargazer\/?p=8086"},"wordCount":1153,"commentCount":0,"publisher":{"@id":"https:\/\/sterling.com\/stargazer\/#organization"},"image":{"@id":"https:\/\/sterling.com\/stargazer\/?p=8086#primaryimage"},"thumbnailUrl":"","articleSection":["Blog","Cloud","Data Center","Managed Services","Security"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/sterling.com\/stargazer\/?p=8086","url":"https:\/\/sterling.com\/stargazer\/?p=8086","name":"Cloud Native Development On-Prem - Networking - Sterling","isPartOf":{"@id":"https:\/\/sterling.com\/stargazer\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sterling.com\/stargazer\/?p=8086#primaryimage"},"image":{"@id":"https:\/\/sterling.com\/stargazer\/?p=8086#primaryimage"},"thumbnailUrl":"","datePublished":"2020-03-10T08:51:06+00:00","breadcrumb":{"@id":"https:\/\/sterling.com\/stargazer\/?p=8086#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sterling.com\/stargazer\/?p=8086"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sterling.com\/stargazer\/?p=8086#primaryimage","url":"","contentUrl":""},{"@type":"BreadcrumbList","@id":"https:\/\/sterling.com\/stargazer\/?p=8086#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sterling.com\/stargazer\/"},{"@type":"ListItem","position":2,"name":"Cloud Native Development On-Prem &#8211; Networking"}]},{"@type":"WebSite","@id":"https:\/\/sterling.com\/stargazer\/#website","url":"https:\/\/sterling.com\/stargazer\/","name":"Sterling","description":"","publisher":{"@id":"https:\/\/sterling.com\/stargazer\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sterling.com\/stargazer\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sterling.com\/stargazer\/#organization","name":"Sterling","url":"https:\/\/sterling.com\/stargazer\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/logo\/image\/","url":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2023\/03\/Sterling-Computers-Logo-TM.png","contentUrl":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2023\/03\/Sterling-Computers-Logo-TM.png","width":399,"height":145,"caption":"Sterling"},"image":{"@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/facebook.com\/SterlingComp\/","https:\/\/x.com\/sterlingcomp","https:\/\/www.instagram.com\/sterlingcomputers\/","http:\/\/youtube.com\/@sterlingcomp","https:\/\/www.linkedin.com\/company\/sterling-computers"]},{"@type":"Person","@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/person\/b812a18f3a1e77cd0925429d1546e49d","name":"Sterling","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g","caption":"Sterling"},"url":"https:\/\/sterling.com\/stargazer\/?author=2"}]}},"_links":{"self":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/posts\/8086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8086"}],"version-history":[{"count":0,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/posts\/8086\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/"}],"wp:attachment":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}