TUS and Zinkworks Launch €2M Telecommunications Research Group to Make Driverless, Intelligent Shipping Ports a Reality

Pictured (L to R) is Dr Enda Fallon, Principal Investigator, TUS; Prof. Vincent Cunnane, TUS President; Paul Madden, CEO, Zinkworks; and Aileen Cramer, Zinkworks. Photo: Ashley Cahill.

The group will develop cutting-edge autonomous port management capabilities using 5G, AI and cloud, improving eco-efficiency and safety.

As the race for self-driving cars heats up, a team of researchers at the Technological University of the Shannon (TUS) and Athlone-based ICT start-up Zinkworks are turning their attention to how shipping ports can adopt the technology to improve global supply chains, eco-efficiency and safety.

To do this, they have formed a new €2 million cognitive – or ‘thinking’ – technologies management research group aiming to develop a prototype for managing the full port eco-system autonomously – from the cranes to the vehicles that transport shipping containers.

According to Dr Enda Fallon, principal investigator on the project and head of the Department of Computer and Software Engineering at TUS, outputs from the project will have the capability to “smooth the issues with global supply chains”.

“Using 5G intelligent telecommunications management systems, we will be able to alleviate congestion in a port, taking into account things like when did the last ship come in, where did the containers go, how they are stacked and stored and how does that impact the network coverage,” he explained.

“Because you’ve got so many autonomous vehicles and so much networking involved, it is critical to be able to understand that environment and predict what the network coverage is going to be to ensure the autonomous vehicles stay connected and continue to operate as intended.”

“To put things in perspective, he continued, “Imagine if, due to a crane having issues with the network, a shipping container weighing 100 tons ends up dangling 40 feet in the air in windy conditions because of poor coverage. That’s a serious safety hazard.”

The new TUS-Zinkworks research collaboration, which received initial funding from the IDA and Enterprise Ireland through the Innovation Partnership Programme, will encompass 15 research staff and PhD students.

TUS President Prof. Vincent Cunnane said the project “illustrates how close collaboration can create deep knowledge for the fast-moving technology sector”.

“Proximity to TUS was a vital factor in Zinkwork’s establishment in Athlone in 2018, and we are delighted to formalise our ongoing partnership and offer our significant expertise and research capabilities in developing this highly sophisticated cognitive telecommunications management prototype,” he said.

Prof. Cunnane also pointed to the importance of deep, strategic technical knowledge development and transfer, explaining that TUS’s transition to technological university has been “vital” in building the physical and knowledge capability to support start-up companies, such as Zinkworks, as they continue to expand their workforce.

TUS supports regionally based ICT companies through its Software Research Institute (SRI), which it established in 2006 to facilitate applied research collaborations with industrial partners.

Zinkworks, which services clients in the telecommunications and financial services sectors, has expanded significantly since its establishment and now has more than 200 employees across three locations, Athlone, Letterkenny and Hyderabad in India.

The highly successful ICT start-up aims to launch its first telecommunications product through this research project with TUS, which is expected to take 18 months to bring to fruition.

“As 5G private networks are rolled out in complex dynamic environments like ports and manufacturing facilities with advanced automation, understanding the impact of the changing environment on the critical network characteristics and quality of service is essential,” Zinkworks CEO Paul Madden explained.

“The collaboration with TUS will provide this knowledge and through machine learning, modelling will define how best to optimise coverage required for complex industry use cases.”

The partnership is also expected to benefit current and future TUS students by providing the project’s investigators with insight into the skills that students will require in the medium to long term.

“Such a problem-based innovative project creates opportunities for both undergraduate and postgraduate students, giving them day-one, industry-ready skills. This talent pipeline is vital to support the regional ICT sector,” Dr Fallon said.

“As we look ahead to an autonomous future, the nature of jobs is changing. There will be huge employment opportunities but many of the current engineering jobs will be automated, with more high calibre jobs and specific, advanced skill sets required to manage these autonomous systems.”

Dean of Faculty of Engineering and Informatics at TUS Dr Sean Lyons also welcomed the collaboration, saying, “We have a demonstrated track record of engagement with industry, and this collaboration serves to further illustrate what can be achieved through our close links with local companies.”


Work with us: UI Developer

We are hiring a UI Developer to join our team at Zinkworks.

Zinkworks is a trusted partner to international market leaders in Telecommunications and Financial markets providing digital transformation solutions to elevate their business operations.

Our teams are working on mission-critical software projects for some of the world’s largest technology companies.

At Zinkworks, we are always looking for talented, creative and enthusiastic developers to join our team.

The Opportunity:

In this role, you will be involved in the design, architecture, coding, testing and operations of our global-scale software systems to support the innovation and technical excellence that the rapidly changing field of telco/financial domain requires.

Environment:

Innovative. Flexible. Transparent. Stable. Agile.

Every engineer is responsible for the operations tasks of the system they are working on. Agile teams are fully empowered to make their own decisions, to take over ownership, and to be responsible for their actions.

Main tasks:

  • To work in collaboration with multiple teams – Design, Backend, QA and enjoy new professional and technological challenges.
  • To keep users in your focus and always try to improve the product to maximize the value for the company.
  • To share your knowledge with motivated team members, which also helps you to constantly push each other and improve your skills.

Requirements:

  • Profound Knowledge in HTML5, CSS3, Angular 8+, Typescript, REST API, Websocket API
  • Knowledge of TDD and testing tools such as Jest & Protactor
  • Experience with CI/CD tooling
  • Problem solving skills, particularly the ability to develop quick and sound solutions to resolve complex tasks
  • Agile team player, passionate about learning new technologies and acquiring new skills
  • Very good English (both written and spoken)
  • Bachelor’s or master’s degree (ETH/Uni/UAS) in Computer Science or equivalent degree/experience in software development or infrastructure is a plus.

Company is offering:

  • Competitive salary
  • Health Insurance/Pension Scheme
  • Experience in mission-critical and publicly available software projects
  • Work with large multinational companies
  • Flat organisational structure.

For the benefits we offer please check out our Zinkperks


Zinkworks Apprenticeship Programme – Ingrid’s Experience

Zinkworks apprenticeship programme is in association with the Fastrack into Information Technology (FIT)  programme.

Ingrid joined Zinkworks through the FIT apprentice program with Athlone Training Centre in 2021 and is about to begin her final semester. Here she describes her experience at Zinkworks thus far.

“I am making a career transition and balancing studies, work, and family time. I am a participant in the FIT apprenticeship program at Zinkworks as well as a master’s degree student in Mobile Development at PUC-Minas Brazil. Zinkworks has allowed me to put into practice everything I studied in college and the FIT course.

Since starting at Zinkworks I had a basic understanding of C and C++, but I have been learning Java on my own with the help of my colleagues. My knowledge was used within a large and complex system, and I was mentored by members of my team who gave me effective solutions, taught me how to resolve errors, and about dependencies, management, and automation tools. Team members helped me understand the project and how to find solutions to bugs during the project... As a beginner, I found the start difficult, but with everyone around me helping, I felt confident that I could make mistakes and try again.

FIT and Zinkworks encourage their apprentices to acquire industrial IT certificates during their studies. I chose to obtain the Introduction to Programming Using Java certification from Microsoft at the beginner level because I had Java experience within the company. To prepare for the certification, I used video courses at O'Reilly a subscription service that Zinkworks provides.

I’m starting to study for a Javascript Specialist certification at Intermediate Level. I don't work with Javascript currently, but my studies are more intense. Javascript can be a little challenging for some developers. Javascript is a language that can be used with a variety of frameworks and technologies. It's challenging but I love it! I've done some projects for college as my dream career is Mobile development, I must learn Frontend too. Access to O'Reilly has allowed me to read Javascript books, take some courses, practice the old questions from IT Exams and study with official CIW material.

I am very lucky to be part of Zinkworks, and FIT supports me in my professional growth. I work with many people who are willing to help and show me where I can improve every day. Thank you to everyone who is supporting me and helping me to grow every day.”

Ingrid is one of three apprentices in their final year of study. This year, in 2022, six more apprentices have joined Zinkworks and begun their work experience as part of the FIT apprenticeship program.

To find out more about the apprenticeship programme contact us at info@zinkworks.com.

Click here to learn about careers at Zinkworks.


The experience of being an outed LGBTQ+ person in tech - Meet Adheli

Software Developer Adheli Tavares speaks about her experiences being a member of the LGBTQ+ community.

1. How would you describe your journey to becoming a proud member of the LGBTQ+ community?

Complicated and complex. It’s a process that is always ongoing. There’s confusion and doubts until you find yourself comfortable in your own skin. Therapy was an ally in my process, to understand that all those feelings of inadequacy were uncalled for.

2. Have you found any differences between living in Ireland and the attitude towards the LGBTQ+ community (or you personally) versus living in other parts of the world?

Definitely. I think the main reason is that people here don’t really care.  Although I have been targeted a few times with some not very nice words, I do feel a lot more comfortable walking hand in hand with my partner here than back home.

3. How have you found the attitudes of others towards members of the community in the tech world (globally and in Ireland)?

I have met mostly queer women in the tech industry. Because it’s still a male dominant world, the behaviour I encountered the most was “so you like women then you are one of the guys” which is wrong.  This shows another level of sexism and the old stereotypes around how lesbians must look and act like a man. I have accepted this behaviour previously, mostly to feel included and avoid the mean comments, most of them hidden behind “jokes”.

4. Have you found Zinkworks to be an open and accepting place? How so?

Yes, Zinkworks has been super cool to work with. I think it kind of goes back to the fact people don’t really care as long as you’re a good person and good employee!  Acceptance and respect go along with mental health, which is another thing that Zinkworks has been the best place for regarding support.

5. What further support is needed for the LGBTQ+ community in the workplace and socially?

The “removal” of the necessity of coming out is my big dream. It is good that English is a friendly non-binary language, which helps a lot. I can say that it has taken out a lot of stress when referring to my partner and the questioning when someone decides to label themselves. I think it’s very personal how one describes themselves, then for another person, even someone they do not know to question every little detail is demeaning.

6. What can allies of the community do to support members in their workplace?

First of all, respect their identity (gender/sexuality) and not let it be something that will create a pre-judgement of their work abilities. Let them be heard. If you have doubts about how to talk to someone, ask their name and their pronouns.

When people are asking questions we can differentiate between when someone has a genuine question because they are curious and want to understand, from someone that is just lazy and expect us to be their personal LGBTQ+ dictionary.

At the end of the day, I have been through so much, like working with international teams (before moving to Ireland), learning the quality side of development, managing teams, and laughing with teammates when everything went right. Crying when things went to space. Stayed until late to fix something, or left earlier because it was too tiring. And you, a non-LGBTQ+ person might think “that sounds like some of the stuff I have done” and that’s because we are just like you. People.

Thank you to Adheli for sharing her experiences.

If you need support as part of the LGBTQ+ community you can visit here.

To read more blogs from Zinkworks employees visit here.


5 ways to improve your workspace based on science

Regardless of where we work—at home, in an office. We can all do a few simple things to our work environment to optimise our productivity. Below is a shortlist of the most effective things—none of which require purchasing any products or equipment. Anyone can use these tools to:

  • Maintain alertness and focus longer.
  • Improve posture and reduce pain (neck, back, pelvic floor, etc).
  • Tap into specific states of mind (creativity, logic, etc.) for the sake of work.

1. Sit or stand ( Or Both )

It is best to arrange your desk and workspace so that you can work sitting for some time—10-30 minutes or so for most people, and then shift to work standing for 10-30 minutes, and then go back to sitting. Research also shows that it’s a good idea to take a 5-15 minute stroll after every 45 minutes of work. There is evidence that such a sit-stand approach can reduce neck and shoulder and back pain.

2. Effects of TIME of the day has on you

We are not the same person across the different hours of the day, at least not neurochemically. Let’s call the first part of your day (~0-8 hours after waking up)

“Phase 1.” During this phase, the chemicals norepinephrine, cortisol, and dopamine are elevated in your brain and body. Alertness can be further heightened by sunlight viewing, caffeine and fasting.

Phase 1 is ideal for analytic “hard” thinking and any work that you find particularly challenging. It isn’t just about getting the most important stuff out of the way; it is about leveraging your natural biology toward the best type of work for the biological state you are in.

“Phase 2”: is ~9-16 hours after waking. At this time, serotonin levels are relatively elevated, which lends itself to a somewhat more relaxed state of being—optimal for brainstorming and creative work.

“Phase 3”: ~17-24 hours after waking up is when you should be asleep or try to sleep. During this phase, do no hard thinking or work unless, of course, you must, keep your environment dark or very dim and the room temperature low (your body needs to drop in temperature by 1-3 degrees to fall asleep and stay asleep).

3. Where your screen is and where you look ARE important

There’s a relationship between where we look and our level of alertness. When looking down toward the ground, neurons related to calm and sleepiness are activated. Looking up does the opposite. This might seem wild, but it makes sense based on the neural circuits that control looking up or down.

Standing and sitting up straight while looking at a screen or book that is elevated to slightly above eye level will generate maximal levels of alertness. To get your screen at or above eye level and not work while looking down at your screen may take a bit of configuring your workspace, but it’s worth it for the benefits to your mind and work.

4. Set your background sound

Some people like to work in silence, whereas others prefer background noise. Some kinds of background noise are particularly good for our work output. Working with white, pink, or brown noise in the background can be good for work bouts of up to 45 minutes but not for work bouts that last hours. So, use it from time to time. These are easy to find (and free) on YouTube or in various apps (search by “whitepink, or brown noise”).

Binaural beats are a neat science-supported tool to place the brain into a better state for learning. As the name suggests, binaural beats consist of one sound (frequency) being played in one ear and a different sound frequency in the other ear. It only works with headphones. Binaural beats (around 40 Hz) have been shown to increase certain aspects of cognition, including creativity and may reduce anxiety.

5. Room type can make a difference

There is an interesting effect of workspace optimization called the “Cathedral Effect,” in which thinking becomes “smaller”—more focused on analytic processing when we are in small visual fields. The opposite is also true. In short, working in high ceiling spaces elicits abstract thoughts and creativity, whereas working in low ceiling spaces promotes detailed work. Even relatively small differences (a two-foot discrepancy in ceiling height) have been shown to elicit such differences. The takeaway: consider using different locations: rooms, buildings, indoors or outdoors to help access specific brain states and the types of work they favour.

Very insightful blog post written by Release Manager,  Colm Nibbs

Click here to read more blogs from Zinkworks.


Privacy Policy

Zinkworks Privacy Notice

This is the privacy notice of Zinkworks T/A Neueda Technologies Ireland and the use of Data on the Zinkworks.com website. Zinkworks may be referred to the following  ‘we’, ‘our’, or ‘us’, and the user referred to ‘you’, ‘your’.

Our registered office addresses are:

Shannon Retail Park,

Dublin Rd,

Athlone,

Co. Westmeath,

N37 E2P6

……

Unit 216,

Atlantic Technological University,CoLab,

Port Road,

Letterkenny,

Co. Donegal,

F92 P2VE

[gem_divider color="#ff0041"]
[gem_divider color="#ff0041"]

GitHub & Microsoft Teams Integration

Seeking improvement opportunities to enhance productivity and collaboration is a crucial factor when working with technology. The GitHub integration for Microsoft Teams allows developers to improve their communication by automatically posting messages about issues, pull requests, deployment status, and more. Once GitHub and Microsoft Teams platforms are linked, this allows various options, such as adding comments, closing, and reopening issues or even making pull requests, without leaving your chatbox.

A considerable amount of time might be spent by developers while communicating about code changes, monitoring issues and other GitHub-related activities. This integration improves this communication and optimises the developer’s time, while also encouraging faster discussions on code reviews. All of this is happening right in your Microsoft Teams channel, which tends to be the natural place of ideas and collaboration.

Step 1 – Installation

First, we are going to install the GitHub App in our Microsoft Teams.

  • Go to the Microsoft Teams app store and install the GitHub app or you can directly install it from here.

  • Upon installation, a welcome message is displayed.
  • Use the @GitHub handle to start interacting with the app

Step 2 – Get Started

At this stage, our Microsoft Teams and GitHub user accounts are not linked yet. The following will link the two accounts.

  • Just authenticate to GitHub using a @github signing command or try to subscribe to your repository.

  • A message “Connect GitHub account” is displayed as shown in the following image. Just click on the button to connect the GitHub account.

Once the channel is created.

  • Go to the channel and look for the GitHub icon.
    • if the icon is not visible at the bottom of the channel, you must click on the “…” and search for GitHub integration with Microsoft Teams, as shown in the following image.

  • Once GitHub is set up on Microsoft We can subscribe to the repository, as shown in the following image.

  • Once the repository is subscribed, we will receive notifications as described above.

 

This whole process should be done once. After that, we can subscribe to as many repositories as we need, following just steps 8 to 10.

 

GitHub provides a lot of features to customise your subscription and keep the team up-to-date without switching to different platforms.

For more information go through the GitHub Documentation:

https://github.com/integrations/microsoft-teams/blob/master/Readme.md

 

Click the here to read more of Zinkworks blogs.


Zinkworks Graduate Programme 2022

Zinkworks are now looking for talented individuals to join our 2022 graduate programme. We are looking for recent software engineering graduates to work with us on mission-critical software projects for some of the world’s largest technology companies. Zinkworks is a trusted partner to international market leaders in Telecommunications and Financial markets, where we provide digital transformation solutions to elevate their business operations.

We are seeking graduates with drive, curiosity and passion, who want to create a smarter future. Through our graduate programme, you will be part of a supportive environment, working alongside our diverse teams of engineers, where we are invested in your growth and development.

We want to give you the best start to your technology career. Are you ready to join us and start your journey with Zinkworks today?

 

REQUIRED SKILLSET

The ideal candidate for the graduate programme will have:

  • Recent graduate of Bachelors/Masters degree in software engineering or a similar discipline
  • Curious fast learner – who is eager to thrive in a professional environment
  • Java experience/ DevOps experience in academia
  • Experience working with application frameworks, such as Spring Boot
  • Knowledge of programming & coding
  • A passion for innovation, discovery and trying new things
  • The ability to build strong working relationships with customers and other members of the software development teams
  • The ability to obtain and analyse information
  • Effective communications skills
  • Understanding of development processes

WHAT’S IN IT FOR YOU?

[gem_icon_with_text icon_material="f10a" icon_shape="circle" icon_size="medium" icon_color="#ff0041" icon_color_2="#ff0041" icon_border_color="#ff0041"]

Zinkworks provides a buddy system for all graduates. Each joiner will be paired up with one of our experienced engineers to help and guide them.

.

[/gem_icon_with_text][gem_icon_with_text icon_pack="thegemdemo" icon_shape="circle" icon_size="medium" icon_color="#ff0041" icon_color_2="#ff0041" icon_border_color="#ff0041" icon_thegemdemo="e91c"]

Strong emphasis on learning and education.

[/gem_icon_with_text]
[gem_icon_with_text icon_material="f10c" icon_shape="circle" icon_size="medium" icon_color="#ff0041" icon_color_2="#ff0041" icon_border_color="#ff0041"]

An established support system, with approachable management and regular check-ins with line managers, allows you to address any questions, or concerns you may have.

[/gem_icon_with_text][gem_icon_with_text icon_material="f1b7" icon_shape="circle" icon_size="medium" icon_color="#ff0041" icon_color_2="#ff0041" icon_border_color="#ff0041"]

Offering full-time permanent contract.

[/gem_icon_with_text]

Apply now or before 19th of April 2022

[gem_divider margin_top=”30″]

Apply Now

    [gem_image position=”right” disable_lightbox=”1″ effects_enabled=”1″ src=”26035″]

    [gem_divider margin_top=”80″]


    Work with us: Product Owner

    Looking to make a change in your career? Working with new and exciting technologies of interest to you? Then Zinkworks may be for you!

    We work in the 5G and Financial Services fields, working on groundbreaking projects and making advancements in these areas.

    We are looking for a team-orientated, enthusiastic and career-driven individual to join our team as a Product Owner

    Duties:

    • Plan and prioritise product feature backlog, ensuring backlog management, iteration planning, and elaboration of the user stories.
    • Ability to make, sell, evaluate and uphold the Business Case for Backlog prioritizations.
    • Mitigate impediments impacting the completion of releases and achieving Sprint goals.
    • Ensure the development team has an adequate number of prepared tasks to work on each sprint.
    • Liaison between customers and the development team.
    • Ensure work focuses on those with maximum value that are aligned with product strategy.
    • Ability to motivate teams and individuals around a common product vision and a vision of product development excellence.

    This role might be for you if you have:

    • The ideal candidate will have a third level qualification and/or equivalent industry experience in computer science and technology.
    • 1+ years working as a Product Owner or similar role.
    • 3+ years’ experience in a commercially focused technology organization (Telco is a big advantage).
    • Java or DevOps development experience would also be a big plus.
    • Knowledge of Cloud Native technologies.
    • Experience with SDLC and artefact management tools such as JIRA.
    • Strong problem-solving ability and capability to react to changing requirements.
    • Strong organizational and multitasking skills including the ability to effectively track and prioritize workloads.
    • Candidate should be articulate and have strong attention to detail.

    For the benefits we offer please check out our Zinkperks

    Test

    [gem_divider margin_top="60"]
    [gem_divider margin_top="30"]

    Apply Now

    [gem_divider margin_top="40"]

      [gem_image position="right" disable_lightbox="1" effects_enabled="1" src="26035"]
      [gem_divider margin_top="80"]

      A method to override external domain name resolution in coredns

      There are occasions when you must have more control over the domain name resolution that is taking place inside a Kubernetes cluster.
      For example, imagine the following scenarios.
      1. You are trying to replicate an issue that you observe in a different environment, in your dev K8s cluster. To successfully replicate the issue, you need to ensure that you use the same hostnames, application FQDNs that were used in the original environment.
      2. You are testing an application running on Kubernetes that requires access to third party external endpoints over the internet. You need to ensure that these third-party external connections are created towards some known, test services, not the actual ones.
      3. You need an alternative and a more centralized way to control the responses received to DNS queries by the application pods. (e.g. You do not like to use “hostAliases” option with K8s pods)
      On all the above occasions, you can use the following method to override the responses sent by the internal Kubernetes DNS to your application pods.

      Step 1

      First, we are going to run a “dnsmasq” server in the same Kubernetes cluster as a pod. It will be associated with a configmap through which we can manipulate the DNS records. Other than that, the dnsmasq pod will be exposed via a clusterIP type Kubernetes service.

      To run a “dnsmasq” server as a container, we can first create docker image using following Dockerfile.

      [gem_textbox content_background_style="contain" content_text_color="#30414d" border_color="#ff0041" border_width="3" padding_top="3px" padding_bottom="0px"]

      .
      FROM alpine:latest
      RUN apk –no-cache add dnsmasq
      VOLUME /var/dnsmasq
      EXPOSE 53 53/udp
      ENTRYPOINT [“dnsmasq”,”-d”,”-C”,”/var/dnsmasq/conf/dnsmasq.conf”,”-H”,”/var/dnsmasq/hosts”]
       

      [/gem_textbox]

      As you may notice in the ENTRYPOINT of above, we are running “dnsmasq” in foreground (-d) as well as we pass a configuration file (-C) and a hosts (-H) file to it. During the build, these files do not necessarily need to exist in the docker image. However, during the runtime we will mount relevant configuration files to /var/dnsmasq/conf/dnsmasq.conf and /var/dnsmasq/hosts location accordingly. 

      Now you can build the docker image with “docker build –t dnsmasq:latest ” command. You may push it to a docker image repository that is accessible by your Kubernetes cluster, afterwards

      Step 2

      Now let us create a couple of configmaps to pass the dnsmasq.conf and hosts files to the running dnsmasq pod.

      In below example, we are creating a fake DNS record, that resolves www.zinkworks.com to 10.100.1.1 address. Also, we will create a host’s file record that maps example.zinkworks.com to 10.100.1.2

      [gem_textbox content_background_style="contain" content_text_color="#30414d" border_color="#ff0041" border_width="3" padding_top="3px" padding_bottom="0px"]

       
      #dnsmasq.conf file 
      kind: ConfigMap 
      apiVersion: v1 
      metadata: 
        name: dnsmasq-conf 
        labels: 
          app: dnsmasq 
      data:  
        dnsmasq.conf: | 
          address=/www.zinkworks.com/10.100.1.1 
       
      #dnsmasq hosts file 
      kind: ConfigMap 
      apiVersion: v1 
      metadata: 
        name: dnsmasq-hosts 
        labels: 
          app: dnsmasq 
      data:  
        hosts: | 
        10.100.1.2 example.zinkworks.com 

       

      [/gem_textbox]

      You can create above configmaps in the namespace where you will run the dnsmasq pod, using “kubectl create –f“or “kubectl apply –f” commands. 

      Next let us create a dnsmasq pod using the docker image built in step 1. We will also mount the configmaps created previously to /var/dnsmasq/conf/dnsmasq.conf and /var/dnsmasq/hosts as files. 

      [gem_textbox content_background_style="contain" content_text_color="#30414d" border_color="#ff0041" border_width="3" padding_top="3px" padding_bottom="0px"]

       
      apiVersion: v1 
      kind: Pod 
      metadata: 
        labels: 
          app: dnsmasq 
        name: dnsmasq 
      spec: 
        containers: 
        – image: dnsmasq:latest 
           name: dnsmasq 
           ports: 
           – containerPort: 53 
             protocol: UDP 
             name: udp-53 
          volumeMounts: 
          – name: dnsmasq-conf 
            mountPath: “/var/dnsmasq/conf” 
          – name: dnsmasq-hosts 
            mountPath: “/var/dnsmasq” 
          securityContext: 
            capabilities: 
              add: 
              – NET_ADMIN 
        dnsPolicy: None 
        dnsConfig: 
          nameservers: 
          – “8.8.8.8” 
        restartPolicy: Always 
        volumes: 
        – name: dnsmasq-conf 
          configMap: 
            defaultMode: 0666 
            name:  dnsmasq-conf 
        – name: dnsmasq-hosts 
          configMap: 
            defaultMode: 0666 
            name:  dnsmasq-hosts 

      [/gem_textbox]

      Above is an example pod definition to run the dnsmasq container with desired configurations. Notice how, dnsmasq-conf and dnsmasq-hosts configmaps are mounted as files to the pod. Also notice the “NET_ADMIN” capability given to the container. This will allow you to run the container with UDP port 53.  

      You can create the pod by running “kubectl create –f” or “kubectl apply –f” commands on above pod definition. 

      Once the dnsmasq pod is created, you can confirm if it is running fine by looking at the pod logs.

      Here is an example output. In this case, it is assumed that dnsmsq pod is created in dnsmasq namespace. 

      $ kubectl logs –namespace dnsmasq dnsmasq –f 
       
      dnsmasq: started, version 2.86 cachesize 150 
      dnsmasq: compile time options: IPv6 GNU-getopt no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth no-cryptohash no-DNSSEC loop-detect inotify dumpfile 
      dnsmasq: reading /etc/resolv.conf 
      dnsmasq: using nameserver 8.8.8.8#53 
      dnsmasq: read /etc/hosts – 7 addresses 
      dnsmasq: read /var/dnsmasq/hosts – 1 addresses 

      Finally, we will expose the dnsmasq pod via a kubernetes service. 

      [gem_textbox content_background_style="contain" content_text_color="#30414d" border_color="#ff0041" border_width="3" padding_top="3px" padding_bottom="0px"]

       
      apiVersion: v1 
      kind: Service 
      metadata: 
        name: dnsmasq 
        labels: 
          app: dnsmasq 
      spec: 
        type: ClusterIP 
        ports: 
        – name: udp-53 
           targetPort: udp-53 
           port: 53 
           protocol: UDP 
        selector: 
          app: dnsmasq 

      [/gem_textbox]

      In the future steps, we may need to use the service IP assigned to the dnsmsq service to send our DNS queries to the dnsmasq container. To find the service IP of the dnsmasq service, you can run “kubectl get svc” command on the namespace where you run dnsmasq pod.  

      In our example the dnsmasq service IP is 10.108.96.48. 

      $ kubectl get svc –namespace dnsmasq 
      NAME      TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE 
      dnsmasq   ClusterIP   10.108.96.48   <none>        53/UDP    15s 

       

      You can further check if the domain name resolution is working as expected in the dnsmasq container by running a few nslookup commands from a different pod. 

       In below example, we are running a pod called ubuntu-debugger in the same cluster from which we can check the responses sent by the dnsmasq. It is assumed that ubuntu-debugger pod has nslookup utility. 

       $ kubectl exec -it ubuntu-debugger — /bin/bash 
      root@ubuntu-debugger:/# nslookup www.zinkworks.com 
      Server: 10.96.0.10 
      Address: 10.96.0.10#53 

        

      Non-authoritative answer: 
      Name: www.zinkworks.com 
      Address: 46.101.47.85 

        

      root@ubuntu-debugger:/# nslookup www.zinkworks.com 10.108.96.48 
      Server: 10.108.96.48 
      Address: 10.108.96.48#53 

        

      Name: www.zinkworks.com 
      Address: 10.100.1.1 

        

      root@ubuntu-debugger:/# nslookup www.google.com 10.108.96.48 
      Server: 10.108.96.48 
      Address: 10.108.96.48#53 

        

      Non-authoritative answer: 
      Name: www.google.com 
      Address: 142.251.43.4 
      Name: www.google.com 
      Address: 2a00:1450:400f:804::2004 

      Notice how in the first nslookup command for www.zinkworks.com has returned the actual public IP instead of the fake one we provided to the dnsmasq container in dnsmasq.conf file. This is because this external DNS queries are handled by the coredns and they are by default forwarded to the nameservers specified in /etc/resolv.conf file. 

       Now in the subsequent nslookup commands we specify the service IP of the dnsmasq service which is 10.108.96.48. This ensures that the DNS query is processed by our dnsmasq container directly. As you notice in the second nslookup command for www.zinkworks.com, We have received the fake IP we configured in the dnsmasq container through the dnsmasq.conf file.  

      Any other query that dnsmasq service cannot answer will be sent to the next nameserver in the chain. In our case it is 8.8.8.8 

      Step 3

      Now as you noticed in step 2 above, all external DNS queries are by default not forwarded to our dnsmasq container, unless we specify the nameserver in our query. This is not convenient. Therefore, next we look at how we can configure the coredns to forward all our external DNS queries to dnsmasq container by default. 

      First, we open the coredns configmap in edit mode by running the following command. 

      $ kubectl edit configmap –namespace kube-system coredns 

      This will open a similar configuration as shown below on your editor. 

      [gem_textbox content_background_style="contain" content_text_color="#30414d" border_color="#ff0041" border_width="3" padding_top="3px" padding_bottom="0px"]

      # Please edit the object below. Lines beginning with a ‘#’ will be ignored, 
      # and an empty file will abort the edit. If an error occurs while saving this file will be 
      # reopened with the relevant failures. 
      # 
      apiVersion: v1 
      data: 
        Corefile: | 
          .:53 { 
              errors 
              health { 
                 lameduck 5s 
              } 
              ready 
              kubernetes cluster.local in-addr.arpa ip6.arpa { 
                 pods insecure 
                 fallthrough in-addr.arpa ip6.arpa 
                 ttl 30 
              } 
              prometheus :9153 
              forward . /etc/resolv.conf { 
                 max_concurrent 1000 
              } 
              cache 30 
              loop 
              reload 
              loadbalance 
          } 
      kind: ConfigMap 
      metadata: 
        creationTimestamp: “2020-07-17T05:30:30Z” 
        name: coredns 
        namespace: kube-system 
        resourceVersion: “301258170” 
        selfLink: /api/v1/namespaces/kube-system/configmaps/coredns 
        uid: 96742cb2-14d5-40fe-9890-7b58bb1fc408 

       

      [/gem_textbox]

      The highlighted “forward” section in above configuration should now be modified to forward the external DNS queries to our dnsmasq container. 

      After the modification the configmap should appear as shown below. 

      [gem_textbox content_background_style="contain" content_text_color="#30414d" border_color="#ff0041" border_width="3" padding_top="3px" padding_bottom="0px"]

      # Please edit the object below. Lines beginning with a ‘#’ will be ignored, 
      # and an empty file will abort the edit. If an error occurs while saving this file will be 
      # reopened with the relevant failures. 
      # 
      apiVersion: v1 
      data: 
        Corefile: | 
          .:53 { 
              errors 
              health { 
                 lameduck 5s 
              } 
              ready 
              kubernetes cluster.local in-addr.arpa ip6.arpa { 
                 pods insecure 
                 fallthrough in-addr.arpa ip6.arpa 
                 ttl 30 
              } 
              prometheus :9153 
              forward . 10.108.96.48 
              cache 30 
              loop 
              reload 
              loadbalance 
          } 
      kind: ConfigMap 
      metadata: 
        creationTimestamp: “2020-07-17T05:30:30Z” 
        name: coredns 
        namespace: kube-system 
        resourceVersion: “301258170” 
        selfLink: /api/v1/namespaces/kube-system/configmaps/coredns 
        uid: 96742cb2-14d5-40fe-9890-7b58bb1fc408 

       

       

      [/gem_textbox]

      Next save and exit from the editor so that above change is now reflected to coredns configmap. 

      Finally, you can restart the coredns pods in kube-system namespace by deleting them. This will ensure that our modified configuration is loaded into the new instances of coredns pods that will come up after deleting the old replicas. 

       Here is the command to delete the current coredns pods. 

       $ kubectl delete pods –namespace kube-system –force –grace-period=0 $(kubectl get pods –namespace kube-system | grep coredns | awk -F ‘ ‘ ‘{print $1}’) 

       Now, let us run the same nslookup command on www.zinkworks.com from our ubuntu-debugger container to see if we are getting the expected response. 

      $ kubectl exec -it ubuntu-debugger — /bin/bash 
      root@ubuntu-debugger:/# nslookup example.zinkworks.com              
      Server: 10.96.0.10 
      Address: 10.96.0.10#53 
        
      Name: example.zinkworks.com 
      Address: 10.100.1.2 
        
      root@ubuntu-debugger:/# nslookup www.zinkworks.com  
      Server: 10.96.0.10 
      Address: 10.96.0.10#53 
        
      Name: www.zinkworks.com 
      Address: 10.100.1.1 

      As you notice in the above output now, all our external DNS queries are now first forwarded to the dnsmasq container we configured by default. We do not need to specify the dnsmasq service IP as the nameserver in our nslookup commands like we did in step 2 earlier. 

       As expected, the queries for www.zinkworks.com and example.zinkworks.com return the fake IPs we configured in dnsmasq.conf and hosts file in dnsmasq pod. 

      To find out more about careers at Zinkworks click here.