 Hello everyone and welcome to SIRT's magic show and welcome to cloud native.tv. So this is the SIRT magic show. My name is Saiyam Bhattak. I am a CNCF Ambassador working as Director of Technical Evangelism at SIBO. So before we start, this is an official live stream of CNCF and as such a subject to CNCF Code of Conduct. Please do not add anything to the chat or questions that would be in violation to that Code of Conduct. Basically, please be respectful of all your fellow participants and presenters. So those of you who are new to the stream, so this is a SIRT's magic show and here we dive into the community certifications which is CKACK, ADCKS, some of the concepts and then we do some practical scenarios, see some hands-on, see some tips and tricks and that's pretty much about the show. So I'll share the playlist for the show if you have missed any of the previous episodes which is actually interesting. So this is the fifth one in the series. We have done four episodes till now. The episode one covered the introduction to Humanity Certifications, why they are important, what are they, how you prepare yourself, how you prepare your mindset for that, for the certifications. Day two, we covered the Kubernetes architecture and installation using QBADM and the CRIO. Day three, we covered Kubernetes objects, deployments and all the other things, the pods, deployment replicas and so on. Day four, for the episode four, we covered the taints and tolerations in detail and in day three, we also covered the scheduling aspects like how to schedule using node name, node selector and all those things. Day four, we covered about taints and tolerations, what are taints, what are tolerations and some of the use cases and today, in today's episode, we'll be covering the services and the ingress. So there are different types of Kubernetes services which you can expose, you can expose your pod, deployment to a service and obviously I have Brad which I'll introduce in a moment, I know you are eager. So we have services and ingress which Brad will be talking about from his experience of the certifications, how you should learn from the Kubernetes documentation, some of the sample scenarios and questions and some of the tips and tricks. So what would be pretty interesting, before that, I would like to share one of the articles that Brad shared, have written already. So let me page that in the chat. So this is basically the tips and tricks for CKACKAD, exam tips, very neatly written. So that's why I highly recommend you go through that blog as well. So it's basically overall for CKACKAD but today we'll be focusing on your services and ingress. And just before I introduce Brad, make sure you follow cloud native.tv because it's not only like certs magic show that happens, there are plenty of show that keeps on running throughout the week on cloud native.tv. So make sure you hit that follow button. So welcome you all to the stream today. I'm joined by Brad and he is joining in from New Zealand. It's 3 a.m. for him. So thank you so much for tuning in. I mean, that's really wonderful. You could make time. I mean, this odd timing and you could do this for the community. Really, really, really appreciate that. A big round of applause in the chat for those who are listening. Please give that to Brad, a big shout out. So Brad, please introduce yourself to the community. Hi, Brian. I'm Brian McCoy. I'm the head of cloud engineering for a company called Muller in Australia. Been working with Kubernetes for probably two or three years now. Done a lot of open source as well with projects like Argo, CD, Helm, Calico, yeah, pretty much a lot of them and also have my CK and CKD. So I really enjoy helping people pass as well for a few of my engineers for it. So hopefully you can get a lot of out of today's session. Yeah, just before we begin, one small thing. So in every stream, we give away two certification vouchers, which gives you basically the codes, which give you 50% discount on any of the certification. So I'll be just choosing them. I choose them randomly. So you have to stay at the end of the stream. Second thing is you have to be interactive in the chat. So according to me, who will be the most interactive one in the chat and keep the interactions going on. I'll pick those two winners. So very simple. So make sure you keep the chat interactive and you might win one of the vouchers for the certification. So with that, Brad, your screen is up and over to you. Okay. So I've just prepared a few files and have my terminal ready. So what we'll do today is we'll use the documentation and the terminal because in the exam, that's what we'll be seeing. So generally in the exam, I have two screens. So I have one screen will be for the exam portal. And then the other one is for the documentation. So a lot of people don't know that you can have two screens. So it really helps your efficiency in the exam. So I recommend that you have one for your documentation, one for your terminal. And then another thing is if we go to the documentation as well, you can also bookmark your pages. So as you're studying, what I do is I normally study with, you know, there's a lot of other courses and things you can do. And then once you've learned everything and you're comfortable, I only refer to the documentation and bookmark every single page with meaningful bookmarks. And then when it comes exam time, you'll be able to really fast go to the questions that you need. And then that will help you because the time will go very, very fast. So as much time as you can save in the exam that you don't need. So one thing I, this is sort of my Bible in the exam. The first time I did my exam, I failed and that was probably due to time. So I was doing too many YAML files. So the second time around when I passed, I really focused on imperative commands over declarative because I was wasting a lot of time. And a lot of the things today will do them periodically because we want to save as much time. And they generally, when you type out YAML files, you can do mistakes. And then that causes a lot of time as well. So you can see here that I've ever just started my bookmarks. As I'm doing the CKS now, I'm going to start re-indexing my bookmarks to what's relevant for that course. So for today, I will add them as I go and just sort of get into a habit of always updating your bookmarks. And that's going to help you. So services. There's three, well, there's more than three, but the three main ones are cluster IP, node port, and load balancer. So the first one cluster IP that exposes a service which is only accessible from within the cluster. Node port exposes services via a static port on each node's IP, which you can see diagramed with the same. And then we have load balancer as well. So load balancer is going to expose the service via the cloud provider's load balancer. So we'll also talk about ingress because if you have multiple services, then you won't want to pay for a load balancer for each one, for example in the cloud. So we'll see how using ingress, you can have one entry point to your cluster. You can pay back to go to the other services. So yeah, always good to talk. So if we just go back to the Hollywood services, we can see in here the documents really, really good. Very impressed by the two documents. It's really, really good and helps your test. So you can see here, if you ever forget how to do the service as well, you can just have to go there and copy and paste it to your editor as well. So for one tip that I highly recommend, if you don't know the editor, learn it. If you're using nano, then that's, you're going to waste a lot of time. You can use nano. You can set the variable to the editor. But I would highly recommend going through it or be because that's really good to say, we'll use that service. So yeah, labels are quite an important thing for services as well because when you have a pod that will have its own label, how the service can find to know where to go to that pod because it's called Selective. So if my pod has a selector called AppMyApp on the service, this is going to find a different pod with the selector AppMyApp. So in the exam, sometimes they try to trip you up and they'll have YAML files that don't work and you have to go and figure out what's wrong with them. So generally, it'll be things like service is about wrong or the agri-region needs a big two just to trip you up. So a big one to check and for troubleshooting services as well as check your selectives and labels because that's one of the most vital things. And then you have reports as well. So the target port, that's what the pod's listing on. So you can see here it's nine to the seven six and then the port eight is what it can be reached on. So for node port, there's also another port called node port. If you don't specify it, it will create it for you and that's a specific higher port ranking bar which we'll look at as well. And then let's keep going through it. You can see multiple services as well. So for some services, you need to expose one of one port, companies will likely to configure multiple port and different shipments. So I've had to do this before where the application will be listed on too. You can see here that's HTTP. So that's a little bit on just high-level overview of the services. It's in node port here as well. So that was the default range I was talking about here. If you don't specify that, you can see that's how the local service works. So the service is the pre-similar definition file. And then here you can see the load balancer as well. So companies will provision for you with a load balancer in class. So when you specify a load balancer, they will go and do the hard work and provision the load balancer for your service. So that's it there. And then the cool thing is we've got some good diagrams here for ingress. So what is ingress? So ingress exposes HTTP and HTTP outputs from outside the cluster to services in the cluster. So you can see here the client is coming through the ingress deployment. Let's, in the example, it's, well, it's just ingenex. So ingenex is nice to practice with your own cluster. It went on to practice at top of desktop, but there's many other ways you can practice on the local iPhone top of desktop. So it does it with the form guide to say, I'll show you later on how to do that, but all your traffic will go to the ingress. And then you have the random rule, which will be you can either use host path or use path. And then the preveninates will which service to them route that traffic to you. And then therefore the path. So it goes to route service path. And you can obviously have more than one service and more than one rule. And when you get into the real world, things like the serve manager and external units, which is really awesome tools. So serve manager will make all the certification for you and then external units as well will update the units. So you don't have to do that. So specify that ingress. If we have time at the end, I'll go over that distance. They're called agency, but that's not really in the exact group. So I won't do that at the start. So if there is any questions about ingress at the moment, please leave a comment. Otherwise, I'll get to you. Ingress is a little bit scary at the start, but once if you just focus on the ingress object that you're making, it becomes, you know, it's quite simple. It can be scary, but practice, practice, practice is good for it. And the more you practice the faster we are. It talks here about having an ingress controller as well. So to deploy the ingress controller, you can do really simple stuff as well. So, you know, just cube CTL apply. And then that was for the Docker desktop version. So you can just Google install nginx committees. Very simple. And then you would get that deployed inside your cluster straight away. This is what an ingress resource looks like. So this is minimal ingress. You genuinely don't need to know too much more. But this is one example using the path where you can actually use host as well, which we'll see soon. So annotations are a very important thing once you start using, you start using things like certainly your external DNS. Especially for, there's a lot of things you need to do if you use like static page apps like React. Sometimes you have to change the rewrite target. For example, if you have a path, see here is test path, but then in your React, you have different path as well. You have to do a little bit of rewriting as well, which can be a little bit tricky, but generally it's pretty straightforward. And then you can see here that we're saying, what's this ingress? So it doesn't specify a host. So to find out what your ingress can follow is, you can say, get service. And then I think the good tip is dash capital A, instead of typing up all namespaces is quite long. So you can just go like that. And then that's going to, you can see, this is actually by, is your one? I'll go back to my Docker desktop. So I've got examples there in GCP as your, and generally they work on Docker desktop because I'm going to assume that people don't have the cloud. So if I just say, get context just to make sure I'm in the right one, Docker desktop. Oh, sorry, here's that's a bit easier. And then, and then you can see here that this is my ingress controller. So that's to put that into the namespace of ingress dash index. And then my external IP is localhost. So we know that in this case, my host is localhost. So if I've got localhost dash test path, that will then go to the service name with test. So localhost dash test path, and then that will go in to, to go to my service like we've seen up top here. So my role is test path in this case. Some other tips as well. So like when you're looking for, like, I always use the shorthand aliases instead of typing out services, I'll do svc. So a great tip in the exam if you're nervous, sometimes you don't even forget things. It's really good to know of one easy command you can do. So it's, first of all, you can also use alias as well. So to save time, I go alias k with this cube CTL. Now, in the CKD, it's easier to do this. Sometimes in the CK, it can actually confuse you more because if you have to go into different nodes or something, you use the alias. So sometimes that can trick you up if you type what is k. So it's debatable if you should do the alias. Yeah, it's up to you if you do it. But just remember in CK, you are going in and out of nodes a little bit more. So sometimes I found this didn't help me as much for that. And then if I go api resources, so with this command, it's going to tell me every single shorthand end of the services. So you can see, yeah, obviously, deploys deployments, rs, because that's going to save you crucial time in the same as well. That's a really good trick. It's just cube CTL api resources. That's how I got the SPC known before. And then another good one as well, if you're creating something, you can say like this, like run, and then I might want to say help because this will save you time too. So if you want to create a deployment service or even if you want to create a service as well. So if I say, let's go here. So let's say create servers. And then you can see it keeps you till great service. And then you don't have options. So let's see what the help gives us for that. Great service. Help. And then that's going to give you a lot of hints. If an exam day is a little bit nervous, and then you do have someone watching you the whole time. So if you do forget little things that help command will really help you just go, oh, okay, that's right. I need to specify that it's a no port service. So yeah, in summary, you have api resources and help to help you on the day if you forget it, which are very good. So back to ingress. Pretty straightforward. You can, if you ask to create an ingress object, you can even originally just copy and paste that as well. So copy and paste that in. And then you can change it based on the question. So the exam portal, you will have the question on, I think, the left side, and then you have the terminal in the middle. So you can see the question. And one other tip I recommend is that sometimes the namespaces that you have to use, they're really weird names. So always copy and paste. Don't try and type it out because if you type the wrong thing, then you might lose points because you didn't do the wrong namespaces or something. So it's important to read the exam guide because the copy and paste theory is a bit different. It could be shift insert, but they will tell the exam doctor will tell you that before you start. So it's something like shift insert, shift to leave for a copy and paste, but they will tell you that. One other thing on the day as well is that you can't have anything on your desk or anything. So clear glass of water, have good internet, camera, microphone, because they will be watching you all the time. So here we can see, let's look for a host by phone. I have one. This is good documentation too. If you're ever confused about something not working, you can see the request bus and see what matches and what doesn't. Host name, wildcards. So here you can see we're using hosts. So we're using host and bar. So let's take one example, which we'll show you soon is if you have, let's say, your website is bio.com. We want to have a subdomain called foo. So it's going to say, when someone types in foo.bar.com, that's going to then, if we have a path dash bar on the end of it, that's going to route us to the service one. And that's running on port 80 as well. So you can, you always have to specify the port with the service as well. And then for the wildcard as well, anything with a subdomain on that, then it will it will go to service two as well. So that's, that's pretty much high level what we'll start to do is in practical stuff now as well. But just remember, the documentation is always your Bible. And whenever you're studying, always bookmark the pages. So there's good pages on troubleshooting services as well. So highly recommend to go through that as well. And that will really help you. So yeah, you can have it in Chrome and just obviously add bookmark and then you're having this index of all the things that you want to look at. So if I wanted to do service, I know that every time when I'm doing the practice, I like to do the the terminal, you know, when you're practicing, you're doing practical examples all the time. And then instead of once you're happy with the course, instead of referencing back to the course, go for the documentation, because you're going to have to learn how to find your way through the documentation, because you're not going to have the course on the day. So yeah, you can see just bookmark page, call it something meaningful. You can do it in numbers or zero one service or just like that's fine for me. So that's probably one of the best tips that you can use bookmarks on there. All right, so let's do some practical examples. So this is what you're going to look at a lot here. Any questions, please, please keep them coming. I'm happy to answer as we go. Yeah, no questions so far, but it's going well. Your voice is much, much clearer now. And so basically, we have discussed like, you know, the basic services which are there plus right before load balancer, then you have your ingress. Yes, you can create I mean, you can create one ingress object and based on different paths, you can redirect it to different services. So that that is doable. And yeah, let's let's basically dive into some of the practical examples and all the tips that Brad has given, you know, like bookmarking is very important copy pasting of namespaces rather than typing them to, you know, be safe from the typos. They are very, very important small ones, but but still very important and also use, you know, hyphen capital A instead of hyphen all namespaces. It says time because it's all about time time game when you when you are doing a practical exam like, like, you know, the Cubarity certifications. So all these practical exams, you have to be very careful, you have to be time bound for each question, you have to be fast, you have to try to take all the possible imperative commands and the shortcuts. So for that, we have to practice practice and practice. Yeah, so yeah, apart from that, there is, yeah, if you go through the documentation, documentation is a Bible very rightly said, because documentation gives you in detail, you know, explanation of all the all the things which are there. If you go to the services documentation, you will see like there is a headless service as well where the cluster IP is none, although that is something which is out of scope from the certifications perspective, but it is there. So like this, you will find, I mean, the lot of details that is why like people tend to go for certain courses because they, you know, they try to skim down the documentation into fewer concepts because obviously, when you go through the docs, it will be in detail. But the examples that are there in the documentations, they are really, really neat. And, you know, you can easily copy paste and then edit some of the stuff to make your work. And or you whatever you are seeing on the screen right now, you can directly, you know, see all the sample commands and start using them for your initial, like initial thing, and then hyphen hyphen trieran hyphen or client is something that gives you the YAML and then you, you know, export that and edit that and then apply that. So like this, try to have all the shortcuts in place in mind and practice in this scenario because you are preparing for the certs. Yeah, apologies if the voice wasn't coming clear before. I'll try to speak a bit louder as well. So reverse search is an easy one as well because you generally do the same commands as well. So you can type control R, give you reverse search, and then, you know, you can say, okay, this is the service around four. So so you can, you can do that as well, like what we're talking about also. And then already you've got your command ready. So this is for creating a deployment, for example. So you can see here I'm using dry run equals client, which won't execute the command on given names, what's called a dry run. So and you can build your YAML file into the terminal like that. So that helps me a lot on the exam as well because sometimes if you can't find here, let's say that was a deployment. So if you can't find the parameters like, you know, we have labels, you don't have, if you do pods, you have labels, but if you don't have labels, then you can quickly do that. And then you copy and paste it into your your v editor. And then that will, that will help you to speed up instead of having to type it out. So I'll probably stick more to services now, just at the moment. And because we don't want to waste time. And then I'll go over tips again, but essentially for me, if you want to say, in the exam as well, I generally, when I build my YAML files, I call it the question number, just so if I need to come back to it, I can, I know. So if I was doing, let's say, and then deployment.yaml. And then one thing some people don't know how to get out of there. So you can just press, so there's two modes, there's insert mode and edit mode. So at the moment, I'm in insert mode. So let's say here, I want to create a service for that. I can just copy this here. And then because I'm an insert, you can press I for insert or escape to get out of it. And then I can just copy that in, make some changes if I want. And then one, one, some good things as well is if you have to press I, let's say I have a line I don't want, or even two lines. Let's say here, I go to escape mode and I type dd, that will remove the whole line. So say like 100 dd, that will give it a 100 line. So that's a good tip, because if you want to get rid of things as well. And then to save it as well, you press escape. And then Q exclamation mark to get out, or just W exclamation mark like that. That's going to save the file. So then you can see here that my file will be there to save. And I can reference that as the question. If I don't, I've got it right. To check my work. This is what I did to this answer. You can also describe it as well. That's generally a faster way that you can manage it on your files. So let's get started. So with this one, I put a name, it's very schooled, so it's magic because it's here. So we can see that I have a deployment. I won't worry about creating this deployment game. That's not on scope of this today. Or I'll focus on the progress that serves. So this is Docker desktop. So my English controller is with the localhost. So let's build the server. So we have a deployment. Let's quickly show what the deployment is doing. So you can give it a describe. And let's inspect it to see, you might get a question saying create a service. So here we can see that we have two labels. So labels are very important. We have app. So if we want to create a service for this as well, I find that expose command for service is very easy because the QTTL will do all the hard work. So as far as you can do it create, expose as well. I like to do it myself. Always refer to create new one. So dry run as well. So in this case, I just want to look at this as 180. You can also set the namespace in your context as you are. If you want as well, I generally don't use that. And then see how it exposes as well. So what I forgot to do is add another label. I was going to do a dry run. So you probably have to get a service as well. So now let's see. When we go to expose, let's see the namespace. So you can really leverage the commands that you're going to really use in the first search as well. See, this is in the editor as well. So it's right to record tonight. Actually, because we specified the deployment, we did everything for us. So they actually add both labels as well. So it's so much it creates a service to expose. And then you can see it's done. So that's fine. So that's an example of the cluster icon service. What we'll do now is do an Ingress object for that. So let's see if we have and then just specify the Ingress. And then here we can see the what I might do is I'll put up here as well. So this is very simple. We can see that I always put namespace in the up file as well, because that just protects me if I forget to specify a QCCL namespace, if that will be a full backup. We don't file that up. So that's something I've personally done as well. The dial is specified at the dimensions here, just as a section. So here we use a path and that's just a full backup. So the service that we've created before, it's made a cluster IP. And then I know that I, so for cluster IP, we just have the two ports, the target port and the port. And then what I want the Ingress to do. So when we go, do this diagram again. So we're saying that when we go into local hair, just local host, it's going to wrap to the service that's made for the search manager. So that's all I have to do it. You can try that. And we can do host and stuff as well. Because it's the most basic one. And then I want to do that. And then here we can see that we've got local host on here. So service is typically available. So it's good for troubleshooting. So when you're troubleshooting as well, it's either going to start from the finish or start. So you can work your way out of the pod, service, Ingress, where you can take the pod, service, Ingress, where you can work down the service pod. So it's generally not considered a startup build. So let's see why we have an error. So the error is maybe a problem that let's see that first. So if I go to the service all, okay, know that we have the engine next namespace, we have the controller and local host. So first of all, let's look at the city blocks. So this will be good for more of those, okay. Because that generally always sits in the different, it's our main space. So 503, here at attending input service. So here for 10, service, service, major cluster IP. So let's look at, let's see, well, let's make sure. So in our Ingress object, let's describe it. So let's start it. So we can see here, yep, that's our service name. So it's major cluster IP, number 80. So now let's look at the services as well. Let's go to our outside. Okay, so you can see here, we've got the service name, we're saying to see here, we're saying in the Ingress that it's a cluster IP, where we don't actually have the service, it's named something different. So this could be like a question for tripshark as well. So when troubleshoot, so what we can do is, let's expose it to the driver, back to the docs. So reverse search, let's do a dry run, let's do an example of dry run. You can dry run equals client. And then you can either output it like one thing you can do is output it. And let's say this is question one. So I might just say one service, yeah, for example, you can see here that made my service. So that's not, it's because I didn't specify yet. Okay, that's what it's going to be. So let's say that's two, and then now that should work. Yeah, so let's find out. So this is my service. So the selector of the deployment and pod is going to be absolutely in environment pod. This time we'll call it the correct name. So we know that or that couldn't find it. So that should work. And the reason it was, everything I got today is from just to show you a reference of what I got. I just changed it actually. That was from the Ingress. So yeah, that's what we can do for service. And then we can say that it's run as well. So you can see now that I just left the other one as well. We can either change this or create a service. So now let's see if that works. It's still in that cluster. Okay. So you can see that's been wrong as well. So I'll just hit that again. And then let's create that service. And then this is just a lab that I did last week for Terraform for the student group that I just made it into a doc container. It's an S3 bucket on the static site. So you can see now that it's all working. So that's the way, you know, I had to troubleshoot my own demo, but that would actually work that good because that's what happens in real life. You have to really go troubleshoot and not everything under pressure. It's going to work for you. So, you know, I was under pressure then because I'm doing this demo. So it was actually great that they really see how you have to think back fast because you don't have enough time. Like that would have saved crucial time as well. So yeah, in some way, the service is wrong. So Ingress again, we knew that my rule was saying go to another service, that service didn't exist. So the Ingress didn't want to do it. Just do a 503 because it's like, I don't know. So that's an example of that as well. We can also look at the wild card once well. So let's get rid of what Ingress we have, which is the lead, like the host path because generally it's asked when the host path or path always get into the practice of troubleshooting. It is good to take a break. That's what I have to say. You're always good to start or probably already have. So that was an example of this. Now let's use host. So for host, I'm going to accept the main food and this is straight from the documentation as well. And that's example of local host wild card as well. So that's right. I'm going to do that in a second. So let's look at the there. So let's deploy that. So I've now created this young file here. And then we know that if I got a food.localhost that will come up with the same thing as well. And you can see that that's a with a host as well. So if you wanted to do like mobile.localhost or whatever something like that, you can specify more than one service and that's the beauty of Ingress. So it's a really great thing. And then things like example of, I won't talk about this too much because I'm a designer, but you can use things like cert manager, which will generate my own cert form to this script and then use it externally in this as well as SIXE. When I use this in Validhust before, I use it by host. This is just my test domain that I use. I call the host of SIXE students. That does my SIXE domain. So I've just moved that from A to S typically. So that's one way that everything that entry and generates a certificate. Well, which is quite cool. It's better than traditional other ways. So that's pretty much it in terms of tips. So in summary, we went over load balts and service, cluster IP, node port, we're out of Ingress as well. And there's other things like service as well. They use those for like host stateful applications like Kafka or something that it's good to know because you probably will come across that one day. Not a test, though. There's a few other things that I don't really want to bring up because I just remembered that in summary, documentation survival. When troubleshooting go top down or bottom up, don't start. So when I had that problem before, you would probably just go into deployment. You would have to start from bottom to top. So you'd start from right down to the top or start from the bottom. And that's it. I hope you learned something today. And if you have any questions, feel free to take a chance as well. Yeah. Thank you so much, Brad, for the demo and explaining the concept of Ingress services with the set of examples that you were having and also like the live troubleshooting that you did. Some name is mismatching. So obviously your local host URL won't work. So it has to match with the cluster IP one that was not there. So that is how it actually happens in the practical scenario, in the exam scenario as well. Sometimes you are because you are creating a lot of things. You might miss out a word or you might miss out, misspell a word. So which might lead to such issues that things are not working. So make sure you double check, keep a check on copy paste most of the things as and when you can from the question itself and do not less of typing so that you do not miss out anything and you do not misspell anything while you are submitting the answer or doing a particular scenario for the exam. So when you explained those concepts, you learned about services today and Ingress today, what is cluster IP within the cluster, node port that you can give node IP and node port and the load balancer depending on the cloud controller manager, then you have your Ingress. So Ingress is basically a resource for which you have to have the Ingress controller. And once you have that, you'd be creating an Ingress object. And in the Ingress object, you can define the host. Just like it was like you can just take any example like cncf.com and then you can specify different paths like cncf.com slash about will go to a service about and that obviously that service will be having label selectors matched to the pod and with the respective end points that it will go to. And if it is slash cncf.com slash search magic, then it goes to a service called search magic. So this way you can define multiple paths pointing to multiple services. So that's the kind of the ideology of Ingress. And in the end, like Brad told, you can have your different annotations that can be used in Ingress, you can have your search manager creating your own certificates, and you can have TLS, you can have the TLS you can have TLS host, so it will be like HTTPS. So these things are doable. And I hope you people got some idea on how things were done, how Brad was able to troubleshoot the whole scenario, create the whole scenario, and you with the tips and tricks. So I hope you'll be feeling confident with that. With that, we'll take a leave now. And for the winners, there are two winners that I've already picked. One is Pixel Robots and another one is Kelvin Leaves. So please reach out to me on Twitter so that I can DM you your discount vouchers of 50% on certifications. Thank you so much for tuning in and see you in two weeks. And thank you Brad for tuning in as well. Thank you so much for your time. And thank you all. Bye. Thanks so much.