Explore top IT Infrastructure jobs with Hays
As technology recruitment experts, we’ll match your skills with forward-thinking organizations, competitive salaries and meaningful career progression in an IT infrastructure role.
The transformation of IT infrastructure is accelerating—and your skills are at the heart of it. From cloud migration to modernizing legacy systems, businesses need clear digital strategies and the right professionals to bring them to life. If you're ready to lead the change, we’re here to connect you with the right opportunities.
We place professionals across a wide range of roles, including:
- IT Infrastructure Support
- Infrastructure Management
- Cloud Engineering & Migration
- Network & Systems Administration
- Cybersecurity & Risk Management
- Desktop Support
- Infrastructure Architecture
- DevOps & Automation
Whether you're just starting out or stepping into a leadership role, we’ll help you find a position that fits your skills and career goals.
The following has evaluated to null or missing: ==> haysJobsLocalService.getjobs(keyword, null, null,"3", ucmLocale) [in template "20115#20151#T-HAYS-JOBS-BY-KEYWORD-WEB2" at line 26, column 36] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign jobsResults = haysJobsLocalSe... [in template "20115#20151#T-HAYS-JOBS-BY-KEYWORD-WEB2" at line 26, column 13] ----
1<div class="py-16">
2
3<#assign haysJobsLocalService = serviceLocator.findService("com.hays.jobs.service.HaysJobsService")>
4<#assign ucmLocaleKey = themeDisplay.getLocale()+"."+siteType+"."+"ucmLocale">
5<#assign mobileUrlKey = themeDisplay.getLocale()+"."+siteType+"."+"WEB2_Mobile_Hostname">
6<#assign jobURLKey = themeDisplay.getLocale()+"."+siteType+"."+"WEB2_JobSearch">
7<#assign jobSearchUrl = propsUtil.get(jobURLKey)!"">
8<#assign ucmLocale = propsUtil.get(ucmLocaleKey)!"">
9<#assign mobilePortalUrl = propsUtil.get(mobileUrlKey) !"">
10<#assign langId = themeDisplay.getLanguageId() />
11<#assign currency = staticUtil["java.util.Currency"]>
12<#assign textFormatter = staticUtil["java.net.URLEncoder"]>
13
14<#assign index = 3 />
15<#assign jobCardTitle = ""/>
16<#assign portalSearchURL = "" />
17<#assign jobFriendlyUrl = "" />
18<#assign jobCardSalaryDescription = ""/>
19<#assign jobCardLocationDescription = ""/>
20
21<#if JobsByKewords.getSiblings()?has_content>
22 <#list JobsByKewords.getSiblings() as cur_JobsByKeword>
23 <#assign keyword = cur_JobsByKeword.Keyword.getData()>
24 <#assign encodedKeyword = textFormatter.encode(keyword, "UTF-8")>
25 <#if keyword?? && keyword?has_content>
26 <#assign jobsResults = haysJobsLocalService.getjobs(keyword, null, null,"3", ucmLocale)>
27 <#assign portalSearchURL = mobilePortalUrl + "/" + jobSearchUrl + "?q=${encodedKeyword}" />
28
29 <#if !jobsResults.getJSONObject("result").isNull("jobs")>
30 <div>
31
32 <div class="d-flex justify-content-between align-items-end container-content flex-wrap mb-9">
33 <#if cur_JobsByKeword.Title.getData()?has_content>
34 <h2 class="text-brand-blue font-weight-light mb-0 fs-700 fs-lg-800 mb-0 section-heading">
35 ${cur_JobsByKeword.Title.getData()?keep_before(" ")}
36 <span class="font-weight-semibold">${cur_JobsByKeword.Title.getData()?keep_after(" ")}</span>
37 </h2>
38 </#if>
39 <#if cur_JobsByKeword.CTA.getData()?has_content>
40 <a class="button button--arrow button--no-style-teal-dark" href=${portalSearchURL}>${cur_JobsByKeword.CTA.getData()}</a>
41 </#if>
42 </div>
43
44 <#assign resultJobs = jobsResults.getJSONObject("result").getJSONArray("jobs")>
45 <#assign jobsResultsLength = resultJobs.length() />
46 <#assign index = (jobsResultsLength > 3)?then(3, jobsResultsLength) />
47
48 <div class="carousel">
49 <ul class="container-content grid grid-3 grid-gap-16 grid-gap-lg-32 grid-lg-3">
50 <#list 0..index-1 as i>
51 <#if jobsResultsLength != 0>
52 <#if resultJobs.getJSONObject(i).has("nonFilterableCustomFields")>
53 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("JobTitle")>
54 <#assign jobCardTitle = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("JobTitle").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
55 <#assign jobCardTitle = jobCardTitle?replace("\\\\u(....)", "&#x$1;", "r")/>
56 </#if>
57 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("xLocationDescription")>
58 <#assign jobCardLocationDescription = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xLocationDescription").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
59 <#assign jobCardLocationDescription = jobCardLocationDescription?replace("\\\\u(....)", "&#x$1;", "r")/>
60 </#if>
61 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("xSalaryDescription")>
62 <#assign jobCardSalaryDescription = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xSalaryDescription").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
63 <#assign jobCardSalaryDescription = jobCardSalaryDescription?replace("\\\\u(....)", "&#x$1;", "r")/>
64 </#if>
65 <#if resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").has("xLocaleRecordID")>
66 <#assign url = resultJobs.getJSONObject(i).getJSONObject("nonFilterableCustomFields").getJSONObject("xLocaleRecordID").getJSONArray("values")?replace("\"", "")?replace("]", "")?replace("[", "")/>
67 <#assign jobUrl = url?keep_after("//")?keep_after("/") />
68 <#assign jobFriendlyUrl = mobilePortalUrl + "/" + jobUrl + "?jobSource=HaysGCJ" />
69 </#if>
70 </#if>
71 </#if>
72
73 <li class="carousel-slide">
74 <a href="${jobFriendlyUrl}" class="job-card job-card--grid-teal is-active d-block rounded-lg border border-borders py-7 pb-lg-6 pt-lg-5 px-6 d-flex">
75 <h4 class="text-black lh-title fs-500 fs-lg-600 font-weight-bold mb-4">
76 ${jobCardTitle}
77 </h4>
78 <ul class="font-weight-light mb-4 mb-lg-4 fs-400 fs-lg-400">
79 <li class="d-flex mb-3">
80 <svg class="feather-icon mr-3 mr-lg-5">
81 <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path>
82 <circle cx="12" cy="10" r="3"></circle>
83 </svg>
84 <span class="job-card-label font-weight-normal">${jobCardLocationDescription}</span>
85 </li>
86 <li class="d-flex align-items-start">
87 <div class="group-center mr-3 mr-lg-5">
88 <svg class="feather-icon">
89 <circle cx="12" cy="12" r="10"></circle>
90 </svg>
91 <span>
92 <#if langId == "en_AE" || langId == "en_CZ" || langId == "en_PL">
93 <svg class="feather-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="width:13px;height:13px">
94 <path d="M13 5C13 6.10457 10.5376 7 7.5 7C4.46243 7 2 6.10457 2 5M13 5C13 3.89543 10.5376 3 7.5 3C4.46243 3 2 3.89543 2 5M13 5V9.45715C11.7785 9.82398 11 10.3789 11 11M2 5V17C2 18.1046 4.46243 19 7.5 19C8.82963 19 10.0491 18.8284 11 18.5429V11M2 9C2 10.1046 4.46243 11 7.5 11C8.82963 11 10.0491 10.8284 11 10.5429M2 13C2 14.1046 4.46243 15 7.5 15C8.82963 15 10.0491 14.8284 11 14.5429M22 11C22 12.1046 19.5376 13 16.5 13C13.4624 13 11 12.1046 11 11M22 11C22 9.89543 19.5376 9 16.5 9C13.4624 9 11 9.89543 11 11M22 11V19C22 20.1046 19.5376 21 16.5 21C13.4624 21 11 20.1046 11 19V11M22 15C22 16.1046 19.5376 17 16.5 17C13.4624 17 11 16.1046 11 15" stroke="" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
95 </svg>
96 <#else>
97 ${currency.getInstance(themeDisplay.getLocale()).getSymbol(themeDisplay.getLocale())}
98 </#if>
99 </span>
100 </div>
101 <span class="job-card-label font-weight-normal">${jobCardSalaryDescription}</span>
102 </li>
103 </ul>
104
105 <div class="job-card__action">
106 <#if (JobDetailText.getData())??>
107 <button onClick="location.href='${jobFriendlyUrl}'" class="button button--small button--teal-dark button--arrow">
108 ${JobDetailText.getData()}
109 </button>
110 </#if>
111 </div>
112
113 </a>
114 </li>
115 </#list>
116 </ul>
117 </div>
118 </div>
119 <br/>
120 </#if>
121 </#if>
122 </#list>
123</#if>
124</div>
Our technology recruitment process
Your application goes directly to your very own consultant, plugged into the world of tech.
Your tech consultant will review your resume to match the in-demand skills tech employers are looking for.
Your dedicated consultant will meet you virtually or in one of our many offices near you; the choice is yours.
We'll listen and provide impartial career advice to place you in the right job, with the right organization.
As your lifelong partner, we’ll stay in touch to share opportunities that fit your long-term ambitions in tech.
IT Infrastructure jobs FAQs
Yes, there are currently plenty of IT infrastructure roles. The shift to remote and hybrid working has meant a spike in demand for cloud infrastructure skills and services such as AWS, Azure and Google Cloud.
Infrastructure specialists are needed due to the continued building of new equipment, and second line desktop support experts have increased in strategic importance as cloud services continue to be rolled out. There will always be teething issues when implementing something new.
Some of the current highest paying jobs include Network Engineers earning between $125,000 and $165,000 in New York, and Service Delivery Managers with a salary of $132,000 to $176,000 in Los Angeles.
Our 2025 Salary Guide includes updated market-rate salaries and jobs in-demand or use our Salary Checker to uncover salaries for a wide range of positions.
Permanent jobs that are in-demand right now are: Systems Administrator, Application Support Analyst, Service Desk Manager, and Network Engineer.
However, the increasing number of digital transformation initiatives means contractor roles are also available for migrations and other one-off projects – particularly if you have niche expertise.
In-demand contract roles include: Network Engineers, Systems Administrators and Application Support Analysts.
If you’re a Network Engineer, you should consider Cisco qualifications such as CCNA, CCNP and CCIE. Infrastructure Engineers working on remote servers would find VMware certifications useful.
If you’re looking to better understand how business objectives and digital and IT capabilities inform each other, you could consider a move into service management. Both IT and infrastructure aligned, industry-standard service management qualification ITIL uses a systematic approach. It covers both continuous improvement and service strategies and will help you to adapt infrastructures at your own organisation and give you the agility to react quickly to change.
Cloud skills have seen sustained demand since the pivot to remote working and will continue to do so. Cyber security skills are also sought after, and if you’re an infrastructure engineer looking to upskill, you might consider moving into a network security or security specialist role. Whilst technical skills remain essential, softer ones such as stakeholder engagement also help an infrastructure manager secure buy-in on changes and new initiatives from varying audiences.
Upload your CV and we'll match you with opportunities.
Talk to our expert recruiters about your career path.