This is related to Networking

Popular New Releases in Networking

frp

v0.41.0

shadowsocks-windows

4.4.1.0

requests

v2.27.1

react-router

v2ray-core

v4.31.0

Popular Libraries in Networking

frp

by fatedier doticongodoticon

star image 55464 doticonApache-2.0

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

shadowsocks-windows

by shadowsocks doticoncsharpdoticon

star image 53806 doticonGPL-3.0

A C# port of shadowsocks

requests

by psf doticonpythondoticon

star image 47177 doticonApache-2.0

A simple, yet elegant, HTTP library.

react-router

by remix-run doticontypescriptdoticon

star image 46674 doticonMIT

Declarative routing for React

react-router

by ReactTraining doticonjavascriptdoticon

star image 43698 doticonMIT

Declarative routing for React

okhttp

by square doticonkotlindoticon

star image 41993 doticonApache-2.0

Square’s meticulous HTTP client for the JVM, Android, and GraalVM.

v2ray-core

by v2ray doticongodoticon

star image 39387 doticonMIT

A platform for building proxies to bypass network restrictions.

caddy

by caddyserver doticongodoticon

star image 39075 doticonApache-2.0

Fast, multi-platform web server with automatic HTTPS

Alamofire

by Alamofire doticonswiftdoticon

star image 37489 doticonMIT

Elegant HTTP Networking in Swift

Trending New libraries in Networking

Xray-core

by XTLS doticongodoticon

star image 8099 doticonMPL-2.0

Xray, Penetrates Everything. Also the best v2ray-core, with XTLS support. Fully compatible configuration.

Open-IM-Server

by OpenIMSDK doticongodoticon

star image 7570 doticonApache-2.0

OpenIM: Instant messaging open source project based on go built by IM technology experts. Backend in Go.(由IM技术专家打造的基于 Go 实现的即时通讯(IM)项目,从服务端到客户端SDK开源即时通讯(IM)整体解决方案,可以轻松替代第三方IM云服务,打造具备聊天、社交功能的app。)

workflow

by sogou doticonc++doticon

star image 7431 doticonApache-2.0

Parallel Computing and Asynchronous Networking Engine ⭐️⭐️⭐️

tailscale

by tailscale doticongodoticon

star image 7241 doticonNOASSERTION

The easiest, most secure way to use WireGuard and 2FA.

itlwm

by OpenIntelWireless doticoncdoticon

star image 5394 doticonNOASSERTION

Intel Wi-Fi Drivers for macOS

reverse-proxy

by microsoft doticoncsharpdoticon

star image 5209 doticonMIT

A toolkit for developing high-performance HTTP reverse proxy applications.

axum

by tokio-rs doticonrustdoticon

star image 4413 doticonMIT

Ergonomic and modular web framework built with Tokio, Tower, and Hyper

trojan-go

by p4gefau1t doticongodoticon

star image 4281 doticonGPL-3.0

Go实现的Trojan代理,支持多路复用/路由功能/CDN中转/Shadowsocks混淆插件,多平台,无依赖。A Trojan proxy written in Go. An unidentifiable mechanism that helps you bypass GFW. https://p4gefau1t.github.io/trojan-go/

server

by screego doticongodoticon

star image 4189 doticonGPL-3.0

screen sharing for developers https://screego.net/

Top Authors in Networking

1

mafintosh

64 Libraries

star icon5208

2

libp2p

46 Libraries

star icon7050

3

google

45 Libraries

star icon25552

4

microsoft

33 Libraries

star icon18854

5

apache

32 Libraries

star icon8941

6

hrbrmstr

29 Libraries

star icon194

7

sindresorhus

28 Libraries

star icon22582

8

substack

27 Libraries

star icon3270

9

PacktPublishing

24 Libraries

star icon384

10

NordicSemiconductor

23 Libraries

star icon2136

1

64 Libraries

star icon5208

2

46 Libraries

star icon7050

3

45 Libraries

star icon25552

4

33 Libraries

star icon18854

5

32 Libraries

star icon8941

6

29 Libraries

star icon194

7

28 Libraries

star icon22582

8

27 Libraries

star icon3270

9

24 Libraries

star icon384

10

23 Libraries

star icon2136

Trending Kits in Networking


Java Encryption Libraries enable password encryption, digital signatures, secure random number generation, message authentication, and 2FA. 


Encryption, decryption, and key generation are the three most crucial aspects of Java cryptography. Key-based data security can be enabled in two ways, using symmetric or asymmetric encryption algorithms, considering how secure the code needs to be. Moreover, developers can easily enable security functions directly into the code with the set of APIs available in the Java Cryptography Architecture (JCA). The JCA is the core of java encryption and decryption, hashing, secure random, and various other java cryptographic functions.


Check out the below list to find more trending Java encryption libraries for your applications:

tink  

  • Offers various cryptographic functions like encryption, digital signatures, and more.  
  • Provides an easy-to-use interface, simplifying the implementation of robust security measures.  
  • Follows best practices, minimizing the chance of security vulnerabilities in cryptographic operations.  

bc-java  

  • Provides various encryption, signatures, and hashing algorithms.  
  • Offers flexible options for cryptographic operations to suit various protocols.  
  • Seamlessly integrates into Java applications for strong security features.

jasypt  

  • Supports many encryption methods for tailored security.  
  • Seamlessly integrates encryption features into Java codebases.  
  • Allows easy setup of encryption configurations for different use cases.  

cryptomator  

  • Encrypts files before uploading them to the cloud, keeping data private.  
  • Can easily access encrypted files and work with your data as usual.  
  • Enables secure file storage and access from different environments.  

Aegis  

  • Offers authenticated encryption schemes, ensuring both data confidentiality and integrity.  
  • Provides a user-friendly and straightforward API for implementing cryptographic operations.  
  • Is lightweight and easy to carry, so it works well in limited environments or small systems.  

mockserver  

  • Facilitates creating mock servers for testing and simulating HTTP/HTTPS interactions.  
  • Setting precise expectations for requests and responses helps thoroughly test API interactions.  
  • Can save API requests to reuse in tests for accuracy and reproducibility.  

hawk  

  • Offers a strong MAC algorithm for verifying the integrity and authenticity of messages.  
  • Utilizes an authorization header to transmit authentication information, enhancing security securely.  
  • Works across various platforms and languages, allowing integration into different applications and systems.  

GDA-android-reversing-Tool  

  • Can learn about Android apps by analyzing them using reverse engineering.  
  • Helps analyze and break down the code of Android apps for inspection.  
  • The graphical interface makes it easy to use the reverse engineering features.  

wycheproof  

  • Enables testing cryptographic algorithms and libraries for known security vulnerabilities and weaknesses.  
  • Have many cryptography test cases to ensure it works well in different situations.  
  • Helps confirm if cryptographic implementations work well on different platforms and libraries.  

bt  

  • Can share files, reducing the need for central servers and speeding up downloads.  
  • To speed up downloads, it uses a method called "swarming." This method collects small pieces from many sources simultaneously.  
  • The protocol will download from other sources if a source is unavailable. This ensures that downloads are uninterrupted and strong.  

Peergos  

  • Provides strong file encryption, ensuring data privacy and security from unauthorized access.  
  • Users gain control over their data. They can securely share files and manage access permissions.  
  • It uses a network not centered in one place to save and find files. This makes it so we don't have to rely on one main server, which helps ensure the data is always there and strong.  

i2p.i2p  

  • Let users browse websites and send messages without showing their IP addresses.  
  • Uses powerful encryption to keep data safe and secure when it's sent.  
  • The routing mechanism is not centralized. This makes it difficult for others to track online activities.  

secure-preferences  

  • We use encryption to protect private information from people who shouldn't see it.  
  • It works with Android's SharedPreferences API. This means you can easily use secure data storage without changing much code.  
  • The app protects sensitive information, reducing the risk of data breaches or leaks. It enhances user privacy.  

AndroidWM  

  • Can add personalized watermarks to images, improving branding and ownership recognition.  
  • Can choose where the watermark goes, how big it is, how see-through it is, and what it looks like.  
  • Can process many images together, which makes it simpler to add watermarks to them.  

Cipher.so  

  • Can easily use native code for cryptography in Android apps.  
  • Optimized cryptographic algorithms for efficient and secure data encryption and decryption.  
  • Supports various encryption and decryption methods, enabling customization based on specific security requirements.  

conscrypt  

  • Uses many different ways to keep data safe when encrypted or sent.  
  • Offers up-to-date TLS and SSL protocol versions for secure network communication.  
  • Ensures compatibility with older Android versions, allowing applications to maintain security across devices.  

react-native-sensitive-info  

  • Can securely store sensitive information like passwords or tokens.  
  • Compatible with both Android and iOS, ensuring consistent security practices across different platforms.  
  • Utilizes encryption mechanisms to protect sensitive data from unauthorized access.  

android-storage  

  • Simplifies data storage and retrieval tasks in Android apps, promoting efficient data handling.  
  • Offers the option to encrypt files stored on the device, enhancing data security.  
  • Can focus on how things work instead of how things are stored.  

whorlwind  

  • Offer tools to protect data when stored and transferred, ensuring it stays safe.  
  • Supports various encryption algorithms for different security needs.  
  • Designed for use across various platforms, promoting consistent security practices.  

encrypt  

  • Enables encryption and decryption operations within Android applications.  
  • Supports many encryption algorithms, offering flexibility in choosing the appropriate method.  
  • Simplifies the process of implementing encryption-related functionalities.  

java-aes-crypto  

  • Offers AES encryption and decryption capabilities, a widely used symmetric encryption algorithm.  
  • Provides mechanisms for secure key generation and management within Java applications.  
  • Supports cryptographic modes that ensure both data confidentiality and integrity.  

Android-Goldfinger  

  • Facilitates fingerprint-based authentication and access control in Android apps.  
  • Enhances user security by integrating biometric authentication.  
  • Offers a user-friendly interface for integrating fingerprint-related functionalities.  

AESCrypt-Android  

  • Implements AES encryption and decryption for protecting sensitive data in Android applications.  
  • Provides straightforward methods for incorporating AES cryptography into your code.  
  • Enables users to store and transmit sensitive information securely.  

Secured-Preference-Store  

  • Enhances SharedPreferences with encryption, safeguarding sensitive user preferences.  
  • Offers a seamless way to integrate secure preference storage without extensive code modifications.  
  • Prevents unauthorized access to preference data by implementing encryption mechanisms.  

EncryptedPreferences  

  • Integrates secure storage mechanisms for sensitive preferences in Android apps.  
  • Implements encryption to prevent data exposure or tampering.  
  • Provides an API for easily incorporating encrypted preference storage in Android projects.  

FAQ

What are Java encryption Libraries, and what basic encryption capabilities do they provide?  

Java encryption libraries are tools used to improve data security in Java applications. They help implement cryptographic techniques. They offer:  

  • AES (Advanced Encryption Standard): Symmetric encryption for secure data transmission.  
  • RSA (Rivest–Shamir–Adleman): Asymmetric encryption for secure key exchange and digital signatures.  
  • Hashing Algorithms: Generate secure hash codes to verify data integrity.  
  • Digital Signatures: Authenticate data origin and verify integrity.  
  • Key Management: Generate, store, and handle encryption keys.  
  • SSL/TLS: Implement secure communication over networks.  
  • PGP (Pretty Good Privacy): Encrypt and decrypt data for privacy.  

   

How can password encryption be achieved using Java libraries?  

In Java, you can encrypt passwords using JCA or third-party libraries. Hashing algorithms, such as bcrypt and SHA-256, convert passwords into irreversible codes. To keep user credentials safe, adding salt and storing them securely is important. This helps to prevent attacks and maintain confidentiality.  

  

Are digital signatures supported by any of the Java encryption libraries?  

Yes, digital signatures are supported by various Java encryption libraries. Java Cryptography Architecture (JCA) libraries enable the creation and verification of digital signatures. They use algorithms like RSA for asymmetric encryption. Digital signatures are important in Java applications for secure communication and authentication. They ensure data is authentic, integral, and cannot be denied. Bouncy Castle and other Java libraries can help with digital signatures and cryptography.  

  

What is an encryption key, and how is it used to encrypt and decrypt data securely?  

An encryption key is a special code that turns normal data into secret code and back again. It decides how data is changed so only authorized people with the right key can see it. Strong key management is essential to maintain data security and prevent unauthorized access.   

Encryption keys are crucial for secure communication. Data is kept safe from unauthorized access. This happens when it's being transmitted or stored.  

  

Can you create a Message Authentication Code using a popular Java encryption library?  

Developers can use algorithms, such as HMAC from JCA, to implement MAC for security. The sender creates a code that receivers can check using a secret key. This process ensures data is correct and information is secure when sent.  

  

Is there an easy way to generate cipher text from plain text using a library written in Java?  

Java has libraries like JCA that help turn plain text into secret code. Developers can change plain text into cipher text. They do this by choosing an encryption algorithm, such as AES, and using a secret key. They can do this through straightforward method calls. Java applications can securely transmit and store data while keeping it confidential. Developers can easily add strong encryption using these libraries without needing complex coding.  

C# Networking Libraries are used for various purposes. You can make a Chat App, a Multiplayer Game, a File Sharing App, a Database App, and a Streaming App.  


C# networking libraries are the collection of classes and functions used to develop C# programming language network applications. These libraries provide functionality such as networking protocols, data transfer, encryption, and data storage. Examples of C# networking libraries include the .NET Framework Network Classes, System.Net, and OpenNETCF.  


Let us have a look at C# networking libraries in detail below. 

mRemoteNG 

  • Supports many protocols such as RDP, VNC, SSH, Telnet, HTTP/HTTPS, and ICA/HDX. 
  • Rich plugin system to extend the functionality of the application. 
  • Powerful scripting engine to automate common tasks. 

websocket-sharp 

  • Supports the latest websocket protocol specifications. 
  • Supports compression of websocket frames using the Per-Message Deflate extension. 
  • Actively maintained and regularly updated with new features and bug fixes. 

protobuf-net 

  • Serialization and Deserialization. 
  • Compact Binary Format. 
  • Supports Multiple Platforms. 

DotNetty 

  • Event-driven API. 
  • Protocol Agnostic. 
  • Built-in Pipeline. 

NETworkManager 

  • Built-in packet inspection tool that can be used to troubleshoot and diagnose network problems.  
  • Powerful tools for developers, such as a network traffic simulator. 
  • Allows users to configure, monitor, and control their network traffic quickly. 

Mirror 

  • High-performance, extensible, and lightweight. 
  • Designed to be platform-agnostic. 
  • Supports Unity’s built-in Networking. 

surging 

  • High-performance TCP/IP networking stack. 
  • Pluggable architecture that allows developers to easily customize and extend the library to meet their specific needs. 
  • Provides a range of built-in security features. 

BruteShark 

  • Supports many protocols such as HTTP, FTP, SMTP, DNS, and SSL/TLS.  
  • Integrated packet capture engine to capture network traffic and save it in various formats.  
  • Monitor multiple networks simultaneously and can detect MITM attacks. 

LiteNetLib 

  • Supports both client-server and peer-to-peer architectures. 
  • Provides reliable UDP messaging with the help of its own packet fragmentation and reassembly mechanism.  
  • Supports automatic NAT punchthrough for connecting to peers behind a firewall or router. 

MQTTnet 

  • Supports SSL/TLS encryption and authentication. 
  • Provides native support for Windows, Linux, and macOS platforms. 
  • Includes an integrated logging framework. 

LOIC 

  • Allows the user to select from a variety of attack types. 
  • Includes a graphical user interface. 
  • Includes a feature called “Hive Mind”, which allows users to join a “hive” and send requests in unison with other users. 

SteamKit 

  • Support for various languages, including C#, C++, and JavaScript. 
  • Highly extensible and can be used to create custom network protocols for games.  
  • Various functions are designed to facilitate communication between applications and the Steam network. 

NetCoreServer 

  • Flexible API. 
  • Robust Security.
  • Cross-Platform Compatibility. 

DotNetOpenAuth 

  • Provides strong cryptography algorithms and secure communications protocols. 
  • Written in C#, it is easy to port to other platforms.  
  • Allows developers to extend the library for their specific use cases. 

lidgren-network-gen3 

  • Binary Serialization. 
  • Peer-to-peer Networking. 
  • Reliability. 

BeetleX 

  • Built-in support for Cross-Origin Resource Sharing (CORS). 
  • Deep integration with the .Net Core platform. 
  • Provides an asynchronous, non-blocking programming model with no callbacks and no threads. 

BedrockFramework 

  • Provides a distributed object model that allows for objects to be shared across different instances without creating extra copies.  
  • Provides a unique set of tools for debugging and monitoring network traffic and performance. 
  • Allows for a more robust and reliable system than other libraries written in other languages.   

EvilFOCA 

  • Spoofing allows users to hide their IP address when making network requests.   
  • The port scanning feature allows users to scan for open ports on a network.  
  • The mapping feature allows users to map a network and identify various devices, services, and connections. 

FAQ:

1. What is a network application framework? How can C sharp networking libraries assist in building them?  

A network application framework simplifies the development of applications that use networks. It provides tools and libraries. These frameworks offer developers pre-built components and structures to handle various networking tasks. The tasks may involve saving data. They may also include communicating between clients and servers. Additionally, tasks may involve managing errors. Developers can focus on the app's logic and features without worrying about networking.  

C# provides several networking libraries that can help build network application frameworks. You can benefit from these libraries by creating network application frameworks. 

  • Abstraction: It abstracts away low-level networking complexities. It allows developers to focus on higher-level application logic.  
  • Security: It offers built-in security features. It implements secure communication channels and data transmission.  
  • Consistency: Established libraries provide a strong foundation for your network application. It reduces the likelihood of bugs and vulnerabilities.  
  • Productivity: By using pre-built components, developers can accelerate the development process. It reduces the amount of code they need to write from scratch.  
  • Scalability: Some frameworks handle large numbers of clients. It offers scalability features out of the box.  

  

2. Can C# networking libraries create Steam network applications?  

You can use C# networking libraries to make apps that connect with the Steam network. Steam is a digital distribution platform developed by Valve Corporation. It is primarily used for distributing and managing video games and related content. 

It provides an API called the Steamworks API. It allows developers to integrate their applications with the Steam platform. To make the networking parts of your app, use networking libraries and the Steamworks API. You can use the Steamworks API in two ways: with interop mechanisms or C# libraries from third parties.  

  

3. How do I choose the right networking library using C Sharp language for my project?  

Consider your project's needs when choosing a networking library for your C# project. Here is a step-by-step guide to help you make an informed decision:  

  • Define Project Requirements  
  • Consider Existing Expertise  
  • Scalability and Performance  
  • Supported Protocols and Features  
  • Community and Documentation  
  • Ease of Use and Learning Curve  
  • Cross-platform compatibility  
  • Security considerations  
  • Third-party Integration  
  • Longevity and Maintenance  
  • Licensing and Compatibility  
  • Performance Benchmarks and Reviews  
  • Experiment and Prototype  
  • Flexibility for future growth  

  

4. How does the .NET Core Library deal with WebSocket connections?  

The ASP.NET Core framework manages WebSocket connections in the .NET Core library. This framework has built-in support for working with WebSocket connections. WebSocket is a communication protocol. A client and a server can communicate using one TCP connection. It makes creating and managing WebSocket connections in your C# networking apps easier.  

The .NET Core library handles WebSocket connections like this: 

  • Using ASP.NET Core  
  • Creating WebSocket Endpoints  
  • WebSocket Handler  
  • Handling WebSocket Connections  
  • Receiving and Sending Messages  
  • Integration with ASP.NET Routing  
  • Middleware and Services  
  • Full-Duplex Communication  

  

5. What challenges come with socket programming When building applications with C# Networking Libraries?  

Using socket programming libraries to build applications is difficult because it is complex. Socket programming is challenging because it involves low-level networking and many complexities. Developers have more control over the networking but must handle these challenges.  

Here are some common challenges:  

  • Complexity and Learning Curve  
  • Synchronization and Concurrency  
  • Error Handling and Resilience  
  • Data Serialization  
  • Buffer Management  
  • Protocol Design and Parsing  
  • Resource Management  
  • Security Concerns  
  • Firewalls and NAT Traversal  
  • Platform Differences  
  • Testing and Debugging  
  • Scalability  
  • Performance Optimization  
  • IPv4 and IPv6 Compatibility  
  • Real-time Communication  

You can use these tools to determine the location of website visitors based on their IP address or other location data.


These libraries provide a range of functionalities such as geocoding, reverse geocoding, distance calculations, and mapping. They allow developers to determine website visitors' country, city, region, and latitude/longitude based on their IP address. Google Maps Geolocation API is one of the most widely used PHP geolocation libraries. It provides a simple and reliable way to determine the location of website visitors using data from Google Maps. It allows developers to get the latitude and longitude of a location and its estimated accuracy. These libraries enable developers to provide a more personalized user experience by showing relevant content based on the location of website visitors. They also help you to create custom maps and visualizations based on geospatial data and enable location-based advertising and marketing strategies.


PHP Geolocation Libraries are essential tools for web developers who want to create location-based web applications. We have handpicked the top and trending open-source PHP routing libraries for your next application development project:

GeoIP2 PHP:

  • Used in Web Services, REST applications, etc.
  • Provides an easy-to-use API for working with MaxMind's GeoIP2 and GeoLite2 databases.
  • Allows developers to determine the location of website visitors based on their IP address.

Google Maps Geolocation API:

  • Used to determine the location of website visitors using data from Google Maps.
  • Allows developers to get the latitude and longitude of a location.
  • Also provides the estimated accuracy of the location.

Leaflet:

  • Used to handle dynamic map configurations working in a PHP context.
  • It is lightweight and easy to use for building mobile-friendly interactive maps.
  • Supports a wide range of map providers.

GeoPHP:

  • Used in Geo, Map applications, etc.
  • It’s a native PHP library for geometry operations and provides basic geospatial functionality.
  • Features include point-in-polygon testing, distance calculations, and geometry simplification.

Geocoder:

  • Used in Utilities, Command Line Interface, Laravel applications, etc.
  • Provides geocoding and reverse geocoding services.
  • Supports data from various providers such as Google Maps, OpenStreetMap, and Bing Maps.

IP2Location:

  • Used in Networking, TCP applications, etc.
  • Provides fast lookup and geolocation services based on IP address data.
  • Includes a database of IP address ranges and location data for various countries and regions.

SmartyStreets:

  • Used in Web Services, REST applications, etc.
  • Provides address validation and geocoding services.
  • Uses data from various providers such as Google Maps, OpenStreetMap, and Bing Maps.

Geotools:

  • Used in Manufacturing, Utilities, Aerospace, Defense, Geo, Map applications, etc.
  • Supports accept almost kinds of WGS84 geographic coordinates.
  • Built on top Geocoder and React libraries.

Location:

  • Used in Networking, TCP applications, etc.
  • Helps retrieve a user's location from their IP address using various services.
  • Works with PHP >= 7.3 and Laravel >= 5.0.

Judge Yvonne Gonzalez Rogers ordered that iOS apps must be allowed to support non Apple payment options in the Epic v. Apple case. In this case, Apple also scored a partial victory as the judge stopped short of calling it a monopoly. The judge also ordered Epic Games to pay Apple 30% of its revenue through the direct payment system. Epic is fighting a similar lawsuit against Google. Countries like South Korea have passed laws requiring Apple and Google to offer alternative payment systems to their users in the country. While the jury is still out on the Epic v. Apple case, it brings out two aspects. Is what is often referred to by developers as the "Apple Tax" of 30% indeed justified? For this reason, Epic launched the Epic Games Store to demonstrate that they could operate at a lower revenue cut of 12%. The second aspect is platform and payments interoperability. When platform interoperability becomes mandated or a global best practice, developers should be ready to bring in payment gateways of their choice. The kandi kit for App Store Payment Alternatives showcases the popular open source payment gateways such as Omnipay, Active Merchant, and CI Merchant and libraries available to connect with leading payment platforms such as Stripe, Braintree, and Razorpay.

Omnipay

Core libraries and samples from Omnipay, a framework agnostic, multi-gateway payment processing library for PHP.

Active Merchant

Libraries on Active Merchant, a simple payment abstraction library extracted from Shopify.

CI Merchant

Though no longer actively supported use the library to build and support your own gateway. If you are not looking to build but to use, then leverage other frameworks.

Braintree

Libraries for Braintree integration.

Razorpay

Libraries for Razorpay integration.

Stripe

Libraries for Stripe integration.

A Python cryptocurrency library is essential for developers working with cryptocurrencies. It provides a set of tools and functions to interact with blockchain networks.    

It manages digital wallets, performs cryptographic operations, and handles transactions. These libraries simplify complex tasks, enabling blockchain integration into applications. It also eases the development of cryptocurrency-related projects.    

There are numerous popular cryptocurrency libraries in Python. Electrum is a Bitcoin wallet. It ensures the encryption of your private keys and never leaves your system. It guarantees zero downtime and is fast with cold storage options. Freqtrade is a cryptocurrency algorithmic trading software. It allows you to program your strategy using pandas. With this, you can download market data and test your strategy using simulated money. We also have LBRY, which claims to publish what Bitcoin did to money. With millions of people using the platform, it provides a free and open network for digital content. Vyper is a contract-oriented language that targets the Ethereum Virtual Machine. It aims to build secure smart contracts with simpler language implementation and auditability.

freqtrade:   

  • It is a popular open-source cryptocurrency trading bot written in Python.   
  • It offers a backtesting feature. This allows traders to test their strategies using historical data.   
  • It benefits from the developer and contributor community.   

lbry-sdk:   

  • It is a software development kit (SDK) for the LBRY protocol.   
  • LBRY is a decentralized content-sharing and publishing platform that utilizes blockchain technology.   
  • It helps developers to build applications and services on LBRY protocol. 

electrum:   

  • It is often used as a lightweight and efficient wallet implementation.   
  • It provides a simplified interface for interacting with the Bitcoin blockchain.   
  • It is modular, allowing developers to customize and extend its functionality.

bips:   

  • "BIPs" likely refers to Bitcoin Improvement Proposals.   
  • It helps with Blockchain, Cryptocurrency, and Bitcoin applications.   
  • It plays a role as a standardization and communication mechanism.

binance-trade-bot:   

  • It helps to automate your trading strategies, executing trades based on predefined criteria.   
  • It can offer several advantages in the cryptocurrency space.   
  • It can operate around the clock. This responds to market changes even when you're not monitoring the markets.

vyper:   

  • It helps with Blockchain, Cryptocurrency, Ethereum applications.   
  • It is a Pythonic Smart Contract Language for the EVM.   
  • It reduces the risk of vulnerabilities in smart contracts.   

python-binance:   

  • It is a Python wrapper for the Binance API,    
  • It provides convenient access to Binance's cryptocurrency trading and data services.   
  • It simplifies the integration of Binance's services into Python applications.   

alpha_vantage:   

  • Alpha Vantage is a financial data provider.   
  • It offers APIs for accessing various financial and cryptocurrency market data.   
  • It supports data from various cryptocurrency exchanges. This allows users to access information from different markets.

Crypto-Signal:   

  • It gives insights into market trends and potential trading opportunities.   
  • It can include risk management parameters, such as stop-loss and take-profit levels.   
  • It enables the automation of trading strategies.

web3.py:   

  • It provides functionality to interact with Ethereum, a blockchain-based cryptocurrency platform.   
  • Developers can interact with Ethereum smart contracts using Python.   
  • It is a set of specifications for interacting with Ethereum-like blockchains.

golem:   

  • It is a Python library used in Blockchain, & Ethereum applications.   
  • It is a decentralized marketplace for computing power.   
  • It enables CPUs and GPUs to connect in a peer-to-peer network.   

manticore:   

  • manticore is a Python cryptocurrency library.   
  • It helps with Code Quality, Code Analyzer, and Ethereum applications.   
  • It is a symbolic execution tool for analysing smart contracts and binaries.

mythril:   

  • It helps in Financial Services, Fintech, Blockchain, Cryptocurrency, and Ethereum applications.   
  • A security analysis tool for EVM bytecode.   
  • It is also used in the security analysis platform.

catalyst:   

  • Catalysts offer a framework for developing complex trading algorithms.   
  • It provides a structured environment for designing, testing, and executing trading strategies.   
  • It provides tools for simulating and evaluating the performance of trading algorithms.

bitcoin-arbitrage:   

  • It allows traders to exploit price differences between different cryptocurrency exchanges.   
  • It allows for the development of sophisticated algorithmic trading strategies.   
  • It is an opportunity detector.

eth2.0-specs:   

  • It helps in Blockchain, Cryptocurrency, and Ethereum applications.   
  • These are crucial for implementing and interacting with Ethereum 2.0.   
  • These specifications define the rules and protocols for Ethereum's transition. 

zvt:   

  • It is a Python library used in Blockchain and cryptocurrency applications.   
  • It acts as a modular quant framework.   
  • You can install it using 'pip install zvt' or download it from GitHub, or PyPI.   

binance-trader:   

  • Binance-trader in Python is significant for cryptocurrency trading.   
  • It offers a simplified interface to interact with the Binance exchange.   
  • It allows developers to automate trading strategies, access market data, and execute orders.

pytrader:   

  • pytrader is a Python Cryptocurrency library.    
  • It helps with Blockchain, Cryptocurrency, Bitcoin, Nodejs applications.   
  • It is a cryptocurrency trading robot.

raspiblitz:   

  • raspiblitz is a Python Cryptocurrency library.   
  • It helps in Security, Cryptography, Bitcoin applications.   
  • It is a lightning node running on a RaspberryPi with a nice LCD.

raiden:   

  • raiden is a Python Cryptocurrency library.   
  • It helps with Blockchain, and Ethereum applications.   
  • It helps address scalability issues in blockchain networks, particularly for Ethereum.

SimpleCoin:   

  • SimpleCoin is a Python Cryptocurrency library.   
  • It helps in Financial Services, Fintech, Blockchain, and Bitcoin applications.   
  • It is simple, insecure, and incomplete implementation.

coinbasepro-python:   

  • It is particularly used for interacting with the Coinbase Pro API.   
  • It provides a way for developers to integrate their apps with this trading platform.   
  • It facilitates tasks such as accessing market data and placing and managing orders.

py-evm:   

  • Py-EVM, short for Python Ethereum Virtual Machine, is a Python library.    
  • It provides an implementation of the Ethereum Virtual Machine (EVM).   
  • It allows developers to work with Ethereum-based applications and smart contracts using Python.

tinychain:   

  • tinychain is a Python Cryptocurrency library.   
  • It helps with Blockchain, and Bitcoin applications.   
  • It is a pocket-sized implementation of Bitcoin. 

RLTrader:   

  • It is a Reinforcement Learning Trader, in a Python Cryptocurrency library.   
  • It automates trading decisions, reducing the need for constant manual monitoring.   
  • It allows us to learn from historical market data and adjust its trading decisions.

python-bitcoinlib:   

  • It is a Python library that provides tools for working with Bitcoin.   
  • It facilitates the creation, signing, and broadcasting of Bitcoin transactions.   
  • It maintains and updates, ensuring compatibility with the latest Bitcoin protocol changes.

cointrol:   

  • It is a Python library used in Blockchain, Cryptocurrency, and Bitcoin applications.   
  • It is a Bitcoin trading bot and real-time dashboard for Bitstamp.   
  • It creates to automate Bitcoin speculation.

pycoin:   

  • It is a Python library designed to work with Bitcoin and other cryptocurrencies.   
  • It facilitates key generation, conversion, and management.   
  • It assists in creating and validating complex scripts used in Bitcoin transactions.  

smart-contracts:   

  • smart contracts is a Python Cryptocurrency library.   
  • It plays a crucial role by enabling self-executing contracts with predefined rules.   
  • It acts as an Ethereum smart contract for security and utility tokens.

MikaLendingBot:   

  • It is a Python Cryptocurrency library.   
  • It helps with Blockchain, Cryptocurrency, Ethereum, Bitcoin applications.   
  • It acts as an automated lending on Cryptocurrency exchanges.

hummingbot:   

  • It is a Python cryptocurrency library.   
  • It is an open-source software that facilitates algorithmic trading in the cryptocurrency market.   
  • It is particularly useful for market makers who seek to provide liquidity to the market. 

FAQ   

1. What is the purpose of the Python Cryptocurrency library?    

It eases the integration of cryptocurrency-related functionalities into Python applications. It offers a set of tools and methods for tasks. Those tasks are blockchain interaction, wallet management, and transaction processing.   


2. Which cryptocurrencies get support from the library?    

The supported cryptocurrencies may vary depending on the library. Supported ones include Bitcoin, Ethereum, and others. It's essential to check the library documentation for the specific cryptocurrencies it supports.   


3. How do I install the Python Cryptocurrency library?   

Installation methods can vary. You can use pip, which is the Python package manager. It helps with a command like pip install cryptocurrency-library. Refer to the library documentation for any more installation instructions.   


4. Does the library provide functions for interacting with blockchain data?   

Yes, the library often includes functions for fetching blockchain information. Also, it includes querying transaction details and obtaining data from the blockchain. Consult the library documentation for specific methods and examples.   


5. Can I create and manage cryptocurrency wallets using this library?   

Yes, many cryptocurrency libraries offer functionalities for creating and managing wallets. You can generate addresses, check balances, and perform transactions. Ensure you follow security best practices when handling wallets.

Python encryption libraries provide base chunks of pre-written code that can be repurposed to develop a unique encryption-decryption system.

These libraries offer a long list of primitives a developer can build upon, choosing from cipher-decipher algorithms like AES, RSA, DES, etc. It allows developers to deal with sideline attacks better. Open-source Python libraries, not being a part of the standard package, can be installed using the PIP function. Python encryptions systems are not web-exclusive; the language allows a developer the flexibility of cross-platform use, unlike other popular coding languages like, say, PHP.


The list below summarizes our top open-source python libraries, consisting of ready-to-incorporate code components for designing encrypted security. Certbot acquires SSL certificates from the open-source certificate authority, Let's Encrypt. It also gives the developer the option to automatically enable HTTPS protocol and to act as a client for certificate authorities running on the ACME protocol. Mailpile, a web-mail client, focuses on the overall experience by providing a clean user interface. While being a web-based interface, it also provides an API and a command-line interface for developers. Ciphey employs artificial intelligence to assess the type of encryption and decipher the input text fast. It is minimalistic and precise.

certbot:  

  • It is a command-line tool for managing SSL/TLS certificates.   
  • It is often used in conjunction with Python web servers, such as Nginx or Apache.   
  • It enables secure communication over HTTPS.  

Ciphey:  

  • Ciphey is a Python library used in Institutions, Education, Security, and Cryptography applications.  
  • It is a tool designed for automatic decryption of ciphers and codes.  
  • It aims to simplify the process of deciphering encrypted messages. This detects the encryption method and provides the decrypted result.  

Mailpile:  

  • Mailpile helps in Institutions, Learning, Administration, Public Services, Messaging, and Email applications.  
  • It provides an interface for managing and encrypting emails.  
  • Its primary user interface is web-based. It also offers a basic command-line interface and an API for developers.

byob:  

  • BYOB in Python generally refers to "Bring Your Own Bytes" or "Bring Your Own Key," depending on the context.  
  • It allows users to provide their own cryptographic keys. Rather than relying on default or generated keys.  
  • BYOB enables customization to meet these needs.

cryptography:  

  • It is a Python library used in Security, Cryptography applications.  
  • It exposes cryptographic primitives and recipes to Python developers.  
  • It ensures data confidentiality, integrity, and authenticity.

acme-tiny:  

  • acme-tiny is a Python encryption library.  
  • It helps with Security, Encryption, and Docker applications.  
  • You can install using 'pip install acme-tiny' or download it from GitHub, PyPI. It is used as a tiny script to issue and renew TLS certs from Let's Encrypt.

yadm:  

  • yadm is a Python library used in Devops, Configuration Management applications.  
  • yadm is a tool for managing dotfiles.  
  • It helps ensure consistency and ease of setup by keeping track of configurations.

ssh-audit:  

  • ssh-audit is a Python library.  
  • It is a tool used to audit the security configurations of SSH servers.  
  • It identifies potential vulnerabilities and weaknesses in the SSH configuration.

PyBitmessage:  

  • PyBitmessage is a Python library used in Telecommunications, Media, Telecom, Networking applications.  
  • It is a P2P communication protocol used to send encrypted messages to another person.  
  • It aims to hide metadata from passive eavesdroppers.

RsaCtfTool:  

  • RsaCtfTool is a Python library used in Security and Cryptography applications.  
  • It is a Python-based tool designed for solving RSA Capture the Flag (CTF) challenges.  
  • It plays a crucial role in CTF competitions. Its participants often encounter RSA-related problems. 

pycrypto:  

  • PyCrypto is important for several reasons in the context of encryption.  
  • PyCrypto supports various encryption algorithms, hashing functions, and random number generators.  
  • PyCrypto facilitates interoperability by supporting used cryptographic standards.

EQGRP_Lost_in_Translation:  

  • EQGRP_Lost_in_Translation is a Python library.   
  • It helps in Programming Style applications.  
  • It decrypts content of odd.tar.xz.gpg, swift.tar.xz.gpg and windows.tar.xz.gpg.

asyncssh:  

  • asyncssh is a Python library that provides an asynchronous framework for SSH communication.  
  • SSH relies on encryption algorithms to secure data transmission.  
  • asyncssh supports various encryption algorithms, providing a secure means of communication over networks.

Cloakify:  

  • Cloakify is a Python library used in Testing and Security Testing applications.  
  • It is a tool designed to obfuscate or "cloak" data in various formats, making it less conspicuous.  
  • This is useful for hiding sensitive information in plain sight.

demiguise:  

  • demiguise is a Python encryption library.  
  • It helps in Security, Encryption applications.  
  • It is an HTA encryption tool for RedTeams.

Crypton:  

  • Crypton is a Python library used in Security, Cryptography applications.  
  • Crypton is an educational library to learn and practice Offensive and Defensive Cryptography.  
  • It is an explanation of all the existing vulnerabilities on various Systems.

xortool:  

  • It is a tool used for analyzing and breaking simple XOR-based encryption.  
  • XOR is a bitwise operation that helps in encryption.  
  • It is a tool used to analyze multi-byte xor cipher.

tf-encrypted:  

  • tf-encrypted is a Python library that extends TensorFlow.   
  • TansorFlow extends to enable privacy-preserving machine learning using encrypted data.  
  • It aims to make privacy-preserving machine learning available, without requiring expertise in cryptography.

GlobaLeaks:  

  • GlobaLeaks is a Python library used in Security, Encryption applications.  
  • It is an open-source whistleblowing framework designed for secure and anonymous communication.  
  • It provides tools for organizations to set up their own secure whistleblowing platforms.

server:  

  • servers enable secure connections, like HTTPS. HTTPs are vital for protecting sensitive information during data transmission over networks.  
  • It ensures the confidentiality and integrity of data by handling encryption keys.  
  • It provides a central point for managing cryptographic operations.

ssl_logger:  

  • ssl_logger is a Python library used in Security, TLS applications.  
  • It helps in identifying potential vulnerabilities, debugging handshake problems, and ensuring secure communication.  
  • It Decrypts and logs a process's SSL traffic.

simp_le:  

  • simp_le is a Python library that helps with encryption.  
  • It Encrypts Client. It has no bugs and has no vulnerabilities.  
  • simp_le can download it from GitHub.

featherduster:  

  • FeatherDuster is a Python library designed for educational purposes.  
  • It is to help users understand various aspects of cryptography.   
  • It helps in penetration testing scenarios. It assesses the security of cryptographic components in apps and systems.

hawkpost:  

  • featherduster is a Python library used in Security, Cryptography applications.  
  • It is an online service that allows users to create encrypted messages with a sharable link.  
  • Cryptanalib is the moving part behind FeatherDuster, and helps with FeatherDuster.

tfc:  

  • tfc is a Python library used in Networking, Router applications.  
  • It helps developers install privacy-preserving machine-learning techniques.   
  • It is a Tinfoil Chat - Onion-routed, endpoint secure messaging system.

pyopenssl:  

  • pyOpenSSL is a Python wrapper around the OpenSSL library.   
  • It provides support for secure sockets (SSL/TLS) and cryptographic functions.  
  • It allows Python apps to establish secure connections over the internet. It uses the SSL/TLS protocol.

nucypher:  

  • NuCypher is provides a decentralized key management system.  
  • It allows for proxy re-encryption, enabling data sharing without exposing sensitive keys.  
  • This is valuable for apps requiring secure and decentralized access control in blockchain. 

RAASNet:  

  • RAASNet is a Python Encryption library.  
  • It helps with Testing and Security Testing applications.  
  • It is an Open-Source Ransomware as a Service for Linux, MacOS and Windows.

dnsrobocert:  

  • dnsrobocert is a Python library used in Security, TLS, Docker applications.  
  • It obtains SSL/TLS certificates through an automated process.   
  • It integrates with DNS challenges for verification.

Xeexe-TopAntivirusEvasion:  

  • Xeexe-TopAntivirusEvasion is a Python library used in Security, Firewall applications.  
  • It is an Undetectable & Xor encrypting with custom KEY.  
  • It bypasses Top Antivirus like BitDefender, Malwarebytes, Avast, ESET-NOD32, AVG, & Add ICON and MANIFEST to excitable.

Decentralized-Internet:  

  • A decentralized internet can enhance security in Python encryption libraries. It reduces the reliance on central authorities.  
  • This enhances the robustness of encryption implementations.  
  • It can contribute to user privacy by minimizing the collection of sensitive data.

PacketWhisper:  

  • PacketWhisper is a Python library used in Testing, Security Testing applications.  
  • PacketWhisper helps to address specific needs or vulnerabilities in network communication.  
  • It could be valuable for scenarios where secure packet transmission is crucial.

python-paillier:  

  • Python-Paillier is a library that implements the Paillier cryptosystem in Python.  
  • In machine learning, Python-Paillier applies to build privacy-preserving models.  
  • Python-Paillier, being an open-source library, encourages collaboration and contributions from the community.

covertutils:  

  • covertutils is a Python encryption library   
  • It helps with Testing and Security Testing applications.  
  • It is a framework for Backdoor development.

decrypt:  

  • It is crucial for retrieving original data from encrypted content.  
  • It ensures data confidentiality. It allows authorized users to access and understand the information.  
  • It is essential in scenarios were sensitive data needs transmission or storage.

nufhe:  

  • nufhe is a Python library used in Security, Encryption applications.  
  • It is a NuCypher homomorphic encryption (NuFHE) library implemented in Python.  
  • You can install using 'pip install nufhe' or download it from GitHub, PyPI.  

rsa-wiener-attack:  

  • rsa-wiener-attack is a Python library used in Security, Cryptography applications.  
  • A Python version of the Wiener attack targeting the RSA public-key encryption system.  
  • It targets cases where the private exponent is small. It allows an attacker to factorize the modulus.

an2linuxserver:  

  • an2linuxserver is a Python encryption library.  
  • It helps in Security, Encryption applications.  
  • It is a Sync Android notification encrypted to a Linux desktop.

python-rsa:  

  • It provides functionality for working with RSA encryption, a used public-key cryptosystem.  
  • python-rsa helps ensure the confidentiality and integrity of data during transmission.  
  • It provides tools for managing RSA keys, including key generation, serialization, and storage.

NXcrypt:  

  • NXcrypt is a Python library used in Artificial Intelligence, Machine Learning applications.  
  • It is a polymorphic 'python backdoors' crypter written in python by Hadi Mene (h4d3s).  
  • NXcrypt can inject malicious Python files into a normal file using a multi-threading system.

gpgsync:  

  • GPG in Python, it's crucial for key management, encryption, and digital signatures.  
  • GPG provides a way to secure communication and data integrity.   
  • It can enhance the security of your apps. It helps in dealing with sensitive information.

ShellcodeWrapper:  

  • ShellcodeWrapper is a Python encryption library, used in Security and Hacking applications.  
  • Wrappers help organize code by encapsulating related functionalities.  
  • Wrappers often serve as a convenient interface or encapsulation for underlying functionality.

nfreezer:  

  • nfreezer is a Python library used in Security, Encryption applications.  
  • nFreezer (for encrypted freezer) is an encrypted-at-rest backup tool.  
  • It helps in the cases with untrusted destination servers.

oscrypto:  

  • oscrypto is a Python library that provides a high-level interface to cryptographic operations.  
  • It is built on top of the cryptography library. It aims to simplify the use of cryptographic functions in Python.  
  • Its ability to offer a consistent API for various cryptographic tasks.

encrypted-dns:  

  • Encrypted DNS (Domain Name System) in Python encryption libraries.  
  • It is crucial for enhancing the security and privacy of internet communication.  
  • It integrated with encrypted DNS. It ensures the process of resolving domain names to IP addresses is secure.

simple-crypt:  

  • It provides a simple interface for symmetric encryption and decryption.  
  • It can serve as an educational tool. This tool helps individuals who are learning about encryption.  
  • It allows developers to install basic encryption. It enables them to focus on other aspects of their projects.

privy:  

  • privy is a Python encryption library.  
  • It helps in Security, Encryption applications.  
  • It is an easy, fast lib to password-protect your data. 

FAQ 

1.What is encryption?  

It is the process of converting plaintext data into a secure and unreadable form. It is also known as ciphertext, to protect sensitive information.  

 

2.Why should I use encryption in Python?  

Encryption helps secure data during transmission or storage, preventing unauthorized access. It's crucial for protecting sensitive information like passwords, personal data, or confidential files.  

 

3.Which encryption libraries to use in Python?  

Popular encryption libraries in Python include cryptography, PyCryptodome, and cryptography. This library provides high-level cryptographic primitives.  

 

4.How do I install a Python encryption library?  

You can install most libraries using a package manager like pip. For example, to install the cryptography library, run pip install cryptography.  

 

5.What types of encryption algorithms are supported?  

Python encryption libraries often support various algorithms. It includes AES (Advanced Encryption Standard), RSA (Rivest-Shamir-Adleman), and others. Check the documentation for the specific library to see which algorithms are supported.

Web Proxy libraries are a way to access the contents of a website without actually accessing the website itself. Caddy is a simple and lightweight proxy server for the browser.

The web proxy acts as an intermediary between your computer and the website, fetching the content for you and displaying it on your screen. Caddy is a simple and lightweight proxy server for the browser. Betwixt is a high-performance proxy server that supports both HTTP and HTTPS protocols. It is written in JavaScript and provides a secure connection between your application and the client. Mockserver is a mock web server for testing HTTP requests in unit tests with Node.js and other evented I/O based servers such as Twisted and Gevent. Some of the most widely used open-source Web Proxy libraries among developers include

caddy:  

  • It is a modern, open-source web server with automatic HTTPS.  
  • It is popular for its simplicity and ease of use, making it a popular choice for developers.  
  • Its automatic HTTPS feature sets it apart, providing secure connections without manual configuration.

betwixt:  

  • It is a web debugging proxy tool that allows users to intercept, analyze, and change HTTP.  
  • It offers an interface for inspecting network requests and responses.  
  • It is often used for debugging web apps by capturing and examining HTTP traffic.

mockserver:  

  • It is a versatile tool for mocking and testing APIs. It enables developers to simulate server responses.  
  • It supports request matching, response templating, and powerful expectations for testing.  
  • It is particularly useful in scenarios where real API interactions are impractical.

lightproxy:  

  • It is a lightweight, cross-platform proxy tool designed for simplicity and performance.  
  • It supports HTTP interception and provides an interface for managing proxy settings.  
  • It is suitable for developers seeking a straightforward proxy solution without unnecessary complexities.

proxy.py:  

  • It is a pure Python proxy server that supports HTTP and HTTPS traffic interception.  
  • Its simplicity makes it easy to set up and use for various testing and debugging purposes.  
  • You can configure it to offer flexibility for customization.

shuttle:  

  • It is a transparent proxy server for macOS that intercepts and logs HTTP/HTTPS traffic.  
  • It simplifies the process of capturing network requests and responses for analysis.  
  • Developers and network administrators use it on macOS. It helps with debugging and monitoring purposes.

titanium-web-proxy:  

  • It is a .NET library for creating HTTP proxies with a focus on simplicity and flexibility.  
  • It allows developers to intercept and change HTTP requests and responses.  
  • It is suitable for various proxy-related tasks in .NET applications.

squid:  

  • It is a widely used open-source proxy server that supports HTTP, HTTPS, and FTP.  
  • It is popular for its caching capabilities, improving performance by storing accessed content.  
  • It is often deployed in large-scale environments to enhance web content delivery.

Titanium-Web-Proxy:  

  • It creates HTTP proxies with a focus on simplicity and flexibility.  
  • It allows developers to intercept and change HTTP requests and responses.  
  • It is suitable for various proxy-related tasks in .NET applications.  

miniproxy:  

  • It is a lightweight, simple HTTP proxy server written in Python.  
  • It helps with quick setup and usage. This makes it suitable for small-scale testing and debugging.  
  • It is a straightforward choice for scenarios where a minimalistic solution is enough. 

stealth:  

  • It is a command-line tool for creating simple HTTP proxies with a focus on stealthiness.  
  • It aims to be discreet and efficient, suitable for tasks that desire low-profile proxy.  
  • It is a minimalistic option for users who prefer command-line tools.

awslambdaproxy:  

  • It is a serverless proxy solution that leverages AWS Lambda for on-demand scalability.  
  • It allows users to create serverless proxy functions to handle HTTP requests.  
  • It is particularly useful for scenarios that prefer serverless architecture for operations.

FAQ  

1. What is a web proxy library?  

It is a set of functions and tools. It enables developers to install and manage web proxies in their applications. It allows intercepting, modifying, and controlling HTTP requests and responses.  

  

2. Why use a web proxy library?  

It helps in various purposes, such as debugging, security, and performance optimization. They enable developers to inspect and manipulate network traffic. It clears the network traffic between a client and a server.  

  

3. How does a web proxy work?  

A web proxy is an intermediary between a client and a server. It catches requests from the client and forwards them to the server. It will be the vice versa for responses. This interception allows for monitoring and modification of the traffic.  

  

4. What programming languages does the library support?  

Check the documentation to confirm which programming languages this library supports. Common languages include Python, Java, C#, and JavaScript.  

  

5. Is it possible to handle HTTPS traffic with the web proxy library?  

Many web proxy libraries support HTTPS traffic. This allows the interception and decryption of SSL/TLS-encrypted connections. Achieve this by generating and using certificates.

Python Raspberry Pi libraries refer to a collection of software tools and packages. It helps facilitate programming and interaction with various hardware components, sensors, and devices. 


Raspberry Pi is a popular single-board computer. These libraries are written in Python and tailored to the Raspberry Pi's capabilities. It enables the control to read data from various external devices' interfaces. It empowers the development of diverse projects and applications.  


This library is essential for those who utilize it for automation fields. They help simplify the process of hardware integration. It enables us to leverage the computational power for various creative endeavors.   


The following hand-picked libraries are popular libraries of Python Raspberry Pi Libraries: 

core   

  • It helps Institutions, Administration, Public Services, and Raspberry Pi applications.  
  • It allows users to control the GPIO pins on the Raspberry Pi.  
  • It enables interaction with external electronic components and devices.  

OctoPrint

  • It helps with the Raspberry Pi to create a 3D printer control system.  
  • It is a software application that we can install and run on the Raspberry Pi.  
  • It utilizes Pi's computing power to manage and control 3D printers remotely.  
  • It is a user-friendly web interface. It allows users to control their 3D printers from any device. 

 P4wnP1  

  • It is an open-source project that leverages the Raspberry Pi as a flexible platform.  
  • It allows the Raspberry Pi to emulate different USB Human Interface Devices.   
  • It enables the execution of automated keystroke injection attacks.   
  • It allows for remote access to the Raspberry Pi. It enables security to execute various security tests.  

donkeycar

  • It is a Python library in IOT, Deep Learning, and Raspberry Pi applications.  
  • It integrates Raspberry Pi as the main processing unit, along with various components.  
  • It helps users connect and control these hardware components.  

tensorflow-on-raspberry-pi

  • It allows users to perform various machine-learning tasks on the device.  
  • It enables the deployment of trained machine-learning models directly on the device.   
  • It allows local inference without the need for a cloud connection.  

vidgear

  • It helps stream video from a camera connected to the Raspberry Pi to other devices over the internet  
  • It enables the Raspberry Pi to record video from a connected camera and save it to a file for later analysis.   
  • It is compatible with various camera modules we can connect to the Raspberry Pi.  
  • It provides flexibility in choosing the appropriate hardware for specific video processing needs.  

audio-reactive-led-strip

  • It helps with the Raspberry Pi to create audio-reactive effects.  
  • It is compatible with LED strips that we connect with the Raspberry Pi.  
  • It enables users to create customized audio-reactive lighting displays.  
  • It can use the Raspberry Pi's pins to communicate with external components.  

TinyCheck

  • It is a Python library typically used in Networking, wifi, and Nodejs applications.  
  • It allows you to capture network communications from a smartphone or any device.  
  • We can associate it with a wifi access point to analyze them quickly.  

project_alias

  • It helps with Artificial Intelligence, Speech, and Raspberry Pi applications.   
  • It is compatible with various camera modules that we connect to the Raspberry Pi.  
  • We can use the Raspberry Pi's pins to communicate with external components.  

BerryNet

  • It is an open-source project which turns Raspberry Pi into an intelligent gateway.   
  • It offers capabilities for managing networks and configurations on the Raspberry Pi.  
  • It facilitates tasks such as network setup, monitoring, and troubleshooting.   
  • It supports wireless communication protocols and tools for handling wifi connections.  

picamera

  • It provides a way to control the Raspberry Pi Camera Module.   
  • It offers an interface for capturing images and recording videos from the camera.  
  • It allows for image manipulation and processing directly on the Raspberry Pi.  
  • It makes it convenient for applications that require real-time image processing.   

gpiozero 

  • It is a simple Python library designed to control GPIO components.  
  • It is compatible with various models of the Raspberry Pi. It makes it a versatile choice for projects.  
  • It allows users to define actions based on specific events, such as button presses.  

 tinypilot 

  • It helps with the Internet of Things (IoT) and Raspberry Pi applications.   
  • We can associate it with a wifi access point to analyze them quickly.  
  • It facilitates tasks such as network setup, monitoring, and troubleshooting.  

blinker-py 

  • It provides a simple yet powerful implementation of the Observer patterns.  
  • It facilitates the decoupling of components in an application.  
  • It is compatible with different Python versions.  
  • It is accessible for a wide range of projects and applications.   

raspberry_pwn

  • It is a Raspberry Pi pen-testing suite built on Debian, not Raspbian. It will not work on Raspbian images.  
  • The minimum PWM output frequency is 10 Hz. The maximum PWM output frequency is 8 KHz.  
  • A duty cycle of 0 means that the waveform is always low. A duty cycle of 1 means the waveform is always high.  
  • It supports specifying the PWM clock frequency directly.  

goSecure

  • It is a Python library in Networking, Docker, and Raspberry Pi applications.   
  • It is compatible with various models of the Raspberry Pi. It makes it a versatile choice for projects.  
  • It allows you to capture network communications from a smartphone or any device.  

self_driving_pi_car

  • It helps in AI, Machine Learning, Deep Learning, and Raspberry Pi applications.  
  • It helps users connect and control these hardware components.  
  • It provides flexibility in choosing the appropriate hardware for specific video processing needs.  

FAQ:  

1. What Python libraries can we use in Raspberry Pi?   

The libraries are Wiring Pi, Pigpio, Gpiozero, and Rpi. GPIO. We can explain each library with a description and its main features. We can also explain a code example in Python and a code example in C if supported by the library.   


2. What is the GPIO library in Python?   

GPIO Python library lets you configure, read, and write to GPIO pins.   


3. What is Raspberry Pi storage type?   

They have no internal storage. All Raspberry Pi units come with an SD or microSD card slot to help users resolve this issue. The original Raspberry Pi Model A and Raspberry Pi Model B take SD cards.   


4. What code does Raspberry use?   

Raspberry Pi programming language supports both C and C++. It makes an ideal language for developing operating software and games.   


5. Why do we use Python in Raspberry Pi?   

The Raspberry Pi Foundation selected Python as the main language because of its ease of use. Python is preinstalled on Raspbian, so you'll be ready to start. You have many different options for writing Python on the Raspberry Pi.  

HTTP Security libraries allow you to set HTTP headers on your API requests that help make your app more secure. These headers include things like CORS and authentication tokens.

You can also use them to detect things like CSRF attacks. The Helmet module provides a handy utility that allows you to protect your Express apps from many common security problems. The Helmet module will automatically configure many of the common HTTP headers that are important for securing Express apps. Go-http-tunnel is a Go package that provides a middleware for transparently tunneling and/or proxying arbitrary TCP connections over HTTP. Go-http-tunnel is most commonly used to tunnel SSH connections, but can be used to create arbitrary tunnels between your network and the public internet. Many developers depend on the following open source HTTP Security libraries

helmet:  

  • Adds extra protection to websites by securing HTTP headers.  
  • Shields against common web vulnerabilities.  
  • Makes it easy to set up security-related HTTP headers.  

st2:  

  • Automates security tasks and coordinates with various security tools.  
  • Enables automatic responses to security incidents.  
  • Enhances overall security by streamlining processes.

hetty:  

  • Acts as a proxy for analyzing and securing HTTP/HTTPS traffic.  
  • Automatically detects and reports vulnerabilities.  
  • Provides a user-friendly web interface for interactive inspection.

Responder:  

  • Fast API framework for Python.  
  • Automatically validates and serializes data.  
  • Supports modular design through dependency injection. 

kore:  

  • Asynchronous web framework designed for efficient handling of concurrent connections.  
  • Built-in support for web technologies like HTTP/2 and WebSocket's.  
  • Facilitates high-performance web applications. 

go-http-tunnel:  

  • Provides secure and encrypted tunneling for HTTP traffic.  
  • Allows bypassing network restrictions for improved accessibility.  
  • Lightweight implementation in Go ensures efficiency.  

secure:  

  • Collection of utility functions for security-related tasks.  
  • Simplifies encryption, hashing, and secure password handling.  
  • Provides essential tools for maintaining a secure application. 

Meteor-Files:  

  • Meteor package designed for secure handling of files.  
  • Simplifies secure file uploads for web applications.  
  • Supports server-side file processing, enhancing flexibility 

FAQ 

1. Why should I use a Helmet in my web application?  

A helmet is essential for enhancing your web application’s security by 

  • automatically setting HTTP headers, 
  • mitigating common vulnerabilities and 
  • simplifying the implementation of security-related headers.  

   

2. What is st2, and how can it benefit my organization’s security practices?  

st2 is a powerful security automation and orchestration platform. It integrates with various security tools. This allows for automated incident response and improved overall security posture.  

   

3. How does Hetty contribute to web security analysis?  

Hetty serves as an HTTP/HTTPS proxy designed for security analysis. It offers automated vulnerability detection and a web-based interface for interactive inspection.  

   

4. What sets Responder apart as a Python API framework?  

Responder stands out with its fast performance, automatic data validation, and serialization. It also supports dependency injection, promoting a modular design for building robust APIs.  

   

5. Why consider using go-http-tunnel for HTTP traffic?  

go-http-tunnel provides secure and encrypted tunneling, enabling the bypassing of network restrictions. Its lightweight Go implementation ensures efficient, secure HTTP traffic handling. 

Build smart application to collect and scrap data from a variety of online sources using these open-source data scrapping libraries.


In today’s world, we are surrounded loads of data of different types and from diverse sources. And every business organisation wants to make the best use of this data. The ability to gather and utilise this data is a must-have skill for every data scientist.


Web scraping is the process of extracting structured and unstructured data from the web with the help of programs and exporting into a useful format. You can efficiently use the Python language to build application to harvest online data through these specific Python libraries.


The following list covers the top and trending libraries for web data scrapping. By clicking on each you can check out the overview, code examples, best applications and cases for each of them, and a lot more. Scroll through:

Working with HTTP to request a web page

Complete web scraping framework

Parsing HTML, XML

Buttons are essentially the drivers of online interaction as we use them to login into our emails, add products to our shopping carts, download photos and basically confirm any and all actions. But more than that, every button click is a successful conclusion of every front-end web developer’s hard work. That’s why it is crucial to spend time creating functional buttons that both look beautiful and provide visual cues to the user. JavaScript offers a ton of great button libraries for you to choose your essential UI components from. Here are some of the JavaScript libraries for buttons including Semantic-UI - UI component framework based around useful principles; Buttons - A CSS button library built using Sass and Compass; Ladda - Buttons with built-in loading indicators. The following is a comprehensive list of the best open-source JavaScript Button libraries in 2022

A router connects your home computers to a local area network (LAN). It then routes packets intended for the Internet (email, web, etc.) through your router to your ISP's (Internet Service Provider) actual connection to the big bad Internet. This project came to life from a personal interest in hardware embedded design and software design in Linux with PHP. The main aim is to build a highly secure Wi-Fi Router out of a Raspberry Pi, easily configurable via a dynamic UI designed in HTML/PHP.

Status Indicators

Security

Authenticator and Router

Analyzer

WI-FI Routing

The Trump Media and Technology Group is being investigated by Software Freedom Conservancy for non-compliance with copyleft licensing. The issue stems from President Donald Trump’s new social network, Truth Social appearing to be forked from Mastodon. While Mastodon is open source and available to use, it is licensed under Affero General Public License (or AGPLv3) that requires The Trump Media and Technology Group to share its source code with all who used the site. If they fail to do this within 30 days, their rights and permissions in the software are automatically and permanently terminated, making their platform inoperable. So if you are just a developer or a former POTUS, copyleft provisions apply to all. If you want to use open source, use kandi.openweaver.com. All libraries are matched to SPDX license definitions and highlighted clearly for appropriate use. Privacy, regulation, bias, and many other issues are weighing down popular social networks. Users are seeking self-hosted social platforms that can be governed by themselves. But do use them with the appropriate licenses. The kandi kit on Opensource Social Platforms lists popular opensource libraries that you can use to host private social channels.

Bluetooth and Wi-Fi are the essential communication medium in the internet world. Bluetooth and Wi-Fi are used to provide wireless communication. Bluetooth allows us to share data, files, voice, music, video, and a lot of information between paired devices. Bluetooth and Wi-Fi provide tracking facility also. If we lose the gadgets and want to track that gadget or track a particular person, we can track them with the help of Bluetooth and Wi-Fi. Bluetooth and Wi-Fi tracking play a vital role in tracking the lost gadgets or a person. Following libraries can help you to perform Bluetooth and Wi-Fi tracking

Build enhanced server side scripting for various usecases in Ruby for your application.Get ratings, code snippets & documentation for each library.

Python Network Programming libraries offer easy-to-use APIs for socket programming. It will allow developers to create and manage network sockets. It will help communication between two endpoints. These libraries support protocols like UDP, HTTPS, FTP, TCP, HTTP, SSH, and others. The Master Python Networking library depends on how much you understand about machine learning libraries and deep learning libraries.  


Network programmability libraries like asyncio offer support for asynchronous programming. Network automation allows developers to write scalable, high-performance network applications. It can handle many connections. These libraries can help serialize data, making sending data over the network easier. The popular libraries offer network analysis tools. It will allow developers to analyze and manipulate network packets. These libraries are like Requests. It offers support for web scraping to extract data from web pages.  


The machine learning library offers various features to help Python developers. The Python programming language helps add network functionality to their applications. There are two levels of network service access available in different programming languages, like high-level and low-level access. Low-level access allows programmers to use and access the basic socket support for the OS using the Python packages.  


Here are the 11 best Python Network Programming Libraries handpicked to help developers:  

opensnitch:  

  • It allows users to control and monitor network connections.  
  • It is on their system by setting rules to allow or deny access.   
  • It is built using Python and the Qt framework.  
  • It uses the iptables firewall to control network traffic.    
  • It offers real-time information about network activity, like ports, protocols, and IP addresses.  

scapy:  

  • It allows users to interact with network packets at a low level.    
  • It offers a powerful API to create, send, receive, and dissect network packets.   
  • It can be used for network analysis, packet manipulation, and packet sniffing.  

trio:  

  • It helps write concurrent and asynchronous network applications.   
  • It offers an alternative to the standard libraries.  
  • It will focus on safety, usability, and simplicity.   
  • It is a simple, safe design and comprehensive features make it the best for various projects.   

crossbar:  

  • It helps build real-time, scalable, and distributed systems using the WebSocket protocol.  
  • It offers a powerful framework for building microservices, distributed systems, and event-driven applications.  
  • It allows developers to create real-time communication applications.  
  • It can help push data to clients in real-time using WebSockets.  

napalm:  

  • It is a Network Automation and Programmability Abstraction Layer. 
  • It offers a vendor-agnostic API to manage and configure network devices.  
  • It supports various network devices like Juniper, Cisco, and Arista.  
  • It has comprehensive features making it best for network programming and automation.  
  • It would be a great assignment to use Network Programmability in such conditions.  

gns3-gui:  

  • It allows users to access complex networks.  
  • It uses real network devices, software-based routers & switches, and virtual machines.   
  • It offers various tools and features to build and manage network topologies.   
  • It can be used for various network engineering tasks.  
  • It can help with testing, designing and troubleshooting network configurations.   

pennylane:  

  • It is an open source Python library for quantum computing, information, and machine learning.   
  • It offers a powerful framework for developing and experimenting with quantum algorithms.   
  • It helps integrate seamlessly with libraries.  
  • It is easy to incorporate quantum computing into machine learning workflows.  

geneva:  

  • It runs exclusively on one side of the network connection and doesn’t require a proxy.     
  • It defeats censorship by modifying the network traffic.  
  • It can help with modifying packets and injecting traffic.   
  • It is composed of four basic packet-level actions for representing censorship evasion strategies.  

evillimiter:  

  • It is a Python library and command-line tool to limit the bandwidth of devices on a network.   
  • It can be used for monitoring network traffic and testing network performance.  
  • Also, it can help with controlling bandwidth usage on shared networks.   
  • Its simple interface and flexible device identification make it easy.  

fopnp:  

  • It offers code snippets and examples which demonstrate different networking protocols and concepts.  
  • It will help include network protocols like HTTP, SSH, TCP/IP, and SMTP.  
  • It helps with TCP listener, TCP client connection, and TCP server connection. 
  • It covers various concepts like network security, network performance optimization, and socket programming.  

hamms:  

  • It is a Python library for calculating the hamming distance between two strings.   
  • It can be used with strings of any length and with any symbol.  
  • It performs error checking to ensure that the two strings are of equal length.  

FAQs:  


What is Network Automation and how does it relate to Python Network Programming?  

The process of automating the management, configuration, deployment, operations, and testing of virtual and physical devices within a network is known as Network Automation. Python network automation has many modules used to automate network tasks like SSH connections to switches and routes.  


What is a client in the context of network automation with Python?  

A client is a computer program which uses Python modules and libraries to interact with network devices. We can perform tasks like operating network equipment, configuring, topologies, managing, services, and connectivity.  

 

Is there any advantage to using more than one python library when doing advanced networking tasks such as SDN or cloud computing integration?  

Yes, there can be advantages to using more than one Python library if you are performing advanced networking tasks. You can perform tasks like cloud computing integration and SDN. With the help of multiple libraries, you can leverage their strengths and build a more flexible solution.  

 

What are the tips for choosing the right library when developing an application? 

When incorporating third-party frameworks or libraries into your application, you should consider the following best practices: 

  • Creating and maintaining an inventory catalog of all the third-party libraries. 
  • Using a framework or library from trusted sources which are actively maintained and used by many applications. 
  • Proactively keep components and libraries updated. 
  • Reduces the attack surface by encapsulating the library and exposing only the needed behavior in your application. 

Here are some of the famous JavaScript ChatGPT Libraries. Some JavaScript ChatGPT Libraries' use cases include Live Chat Support, Online Shopping, Educational Platforms, Healthcare, and Banking.  


Javascript chatgpt libraries are collections of code that provide developers with tools for creating and deploying chatgpt applications. They are designed to simplify the development and deployment of a chatbot, making it easier for developers to create a conversational interface that can provide a robust user experience. These libraries offer a variety of components and features, such as natural language processing, dialog management, text-to-speech and speech-to-text, and AI-based decision-making.  


Let us have a look at the libraries in detail. 

pusher-js

  • Provides real-time communication.
  • Pusher-js will reconnect the user to the chat room if the connection is somehow lost. 
  • Supports multiple platforms, including JavaScript, iOS, Android, Ruby, and Python.

cometchat-pro-react-sample-app

  • Supports group messaging, allowing users to create and join group conversations.
  • Built-in moderation system that allows admins to control conversations and enforce rules.
  • End-to-end encryption ensures that all conversations are private. 

ChatKit

  • Provides synchronized user data across multiple clients, allowing for a more seamless chat experience.
  • Built-in support for native push notifications.
  • Built-in support for bots, making it easier to automate conversations.

LiveChat

  • Integrates with various external services, such as CRM tools, helpdesks, and more. 
  • Offers automation tools to help agents respond faster to customer queries.
  • Provides analytics and reporting features to help agents understand their customer base.

SimpleWebRTC

  • Designed to be highly scalable, allowing large numbers of users to connect at once.  
  • Provides video and audio support, making communicating with friends and family easier.  
  • Requires no servers and very little code, allowing for a quick and easy setup. 

pubnub-api

  • Provides several advanced features, including message history, presence detection, file streaming, and more.
  • Provides global coverage for its APIs.
  • Provides the ability to send and receive messages in real time. 

RTCMultiConnection

  • Offers a customizable UI, allowing developers to create a unique look and feel for their applications.
  • Secure and scalable library with support for WebSockets, WebRTC, and third-party APIs. 
  • Supports data streaming, file sharing, text chat, voice and video conferencing, and screen sharing.

kuzzle

  • Built to scale to millions of concurrent users and devices.
  • Secure, distributed, and highly available data storage layer.
  • Advanced search and analytics capabilities.

Here are some of the famous NodeJs VPN Libraries. Some of the use cases of NodeJs VPN Libraries include: 

  • Securely accessing a private network over the internet. 
  • Creating a virtual private network (VPN). 
  • Bypassing internet censorship. 
  • Securing data in transit.  

Node.js VPN libraries enable developers to create applications that use a virtual private network (VPN). These libraries provide functions for connecting to a VPN server, establishing secure tunnels, encrypting and decrypting data, and managing the connection. They can be used to create applications such as secure file sharing, remote access, and encrypted communication.  

Let us look at the libraries in detail below. 

node-vpn

  • Easy-to-use API that makes it simple to set up and manage a secure VPN connection.  
  • Highly secure, utilizing strong encryption algorithms and offering secure tunneling protocols. 
  • Supports multiple platforms, including Windows, Mac, Linux, iOS, and Android.  

Strong-VPN 

  • Supports a wide range of protocols, including OpenVPN, IKEv2, and SSTP. 
  • Fast and reliable server connections. 
  • Compatible with most major operating systems, including Windows, macOS, iOS, Android, and Linux.  

node-openvpn 

  • Highly secure, as it uses the OpenVPN protocol. 
  • Highly configurable, allowing users to customize the setup for their specific needs.   
  • Supports both IPv4 and IPv6 addressing. 

fried-fame 

  • Easy to get started quickly compared to other VPN libraries.  
  • Designed with security in mind, using the latest encryption algorithms and techniques. 
  • An open-source project, so anyone can contribute and benefit from the development.   

vpngate 

  • Offers an extra security layer for your data and connection.  
  • Offers longer connection times and faster speeds than other nodejs VPN libraries.  
  • Reliable, as it is regularly updated with the latest security protocols. 

expressvpn 

  • Offers unrestricted access to streaming services, social media, and websites.  
  • Features a kill switch and other advanced features to protect your data. 
  • Offers a 30-day money-back guarantee. 

algo 

  • Allows you to customize different VPN profiles for different devices or locations.  
  • Is designed to leverage strong encryption algorithms and secure authentication methods.  
  • Allows you to choose which ports and protocols are used for your VPN connection.  

strongswan 

  • More secure than other nodejs vpn libraries. 
  • Tested and audited by independent experts, and is used by many organizations.  
  • Easy to set up and configure, and can be used on multiple operating systems and devices. 

Here are some of the famous Python WebSocket Utilities Libraries. Some use cases of Python WebSocket Utilities Libraries include Real-time Chat and Messaging Applications, Online Gaming, IoT Applications, and Real-time Data Visualization and Dashboards.


Python WebSocket utilities libraries are collections of code that provide a set of utilities to help developers create and manage WebSocket connections in Python. These libraries typically provide methods to simplify WebSocket connection setup, message sending, message receiving and connection management. They can also provide additional features such as authentication and SSL/TLS support.


Let us have a look at some of these libraries in detail below.

tornado

  • Can handle up to 10,000 simultaneous open connections, making it ideal for applications with high levels of concurrent users.
  • Can handle multiple requests simultaneously without blocking requests.
  • One of the few web frameworks that supports WebSocket connections.

gevent

  • Based on greenlet and libevent, making it extremely fast, lightweight and efficient.
  • Highly extensible and can be easily integrated with other Python libraries and frameworks.
  • Provides a high level of concurrency, allowing multiple requests to be handled at the same time.

twisted

  • Event-driven architecture makes it easy to build highly concurrent applications.
  • Can be used to build distributed applications, which can be used to connect multiple machines over the network.
  • Provides a low-level interface which makes it easier to work with websockets.

websockets

  • Data can be sent and received quickly, allowing for real-time communication.
  • Enable bidirectional communication between the client and the server.
  • Use the secure websocket protocol (WSS) which encrypts all data sent over the connection.

websocket-client

  • Built on top of the standard library's asyncio module, which allows for asynchronous communication with websockets.
  • Supports secure websocket connections via TLS/SSL, as well as binary messages and fragmented messages.
  • Supports custom headers and subprotocols, making it easy to communicate with specific services that require specific headers or subprotocols.

WebSocket-for-Python

  • Supports multiple protocols such as WebSocket, HTTP, and TCP, allowing for more flexible usage.
  • Has built-in security features such as authentication and encryption, allowing you to securely communicate with other applications.
  • Is written in Python, making it easy to use and integrate with existing Python applications.

socketIO-client

  • Supports multiple transports, including long polling, WebSockets and cross-browser support.
  • Support for namespaces, allowing for multiple independent connections to the same server.
  • Allows for subscribing to multiple events, allowing for a more efficient implementation of your application.

pywebsocket

  • Supports both server-side and client-side websocket connections.
  • Provides support for websocket extensions.
  • Supports both connection-oriented and connectionless websockets, making it a versatile tool for developers.

Here are some famous Swift Webserver Libraries. Swift Webserver Libraries use cases include Building a custom web server, Creating a content delivery network (CDN), Hosting a web application, and Developing a mobile application backend.


Swift web server libraries are libraries that are designed to enable developers to create web applications using the Swift programming language. These libraries provide tools to help developers with server-side development tasks such as routing, templating, and data handling.


Let us look at these libraries in detial.

vapor

  • Provides a type-safe, declarative framework for writing web applications.
  • Built-in support for asynchronous programming.
  • Offers an integrated authentication and authorization system.

Moya

  • Supports advanced authentication methods, such as OAuth2, Basic Auth, Client Certificate Authentication and Bearer Tokens.
  • Provides an easy way to mock network requests for testing and development.
  • Allows for custom header, query, and request body encoding for each request.

Perfect

  • Provides a scalable, high-performance web server that is optimized for Swift applications.
  • Offers built-in support for TemplateKit, a powerful templating engine for producing dynamic web content.
  • Has a robust set of development tools and libraries, including an integrated debugger and profiler.

Kitura

  • Built with a modular architecture that supports pluggable components to customize the server’s functionality.
  • Kitura-Stencil template engine allows you to write HTML templates in Swift, making it easier to create dynamic webpages.
  • Supports cloud deployment, allowing you to easily deploy your applications to the cloud.

swifter

  • Built-in security features such as TLS encryption and sandboxing.
  • Designed to be easy to setup and get up and running quickly.
  • Highly extensible and allows developers to customize the server to their own needs.

Zewo

  • Built with an asynchronous, non-blocking I/O model.
  • Optimized for both OS X and Linux and is fully compatible with Swift Package Manager.
  • Built-in support for HTTP/2, TLS/SSL, and other security features.

blackfire

  • Provides support for both synchronous and asynchronous requests.
  • Offers a range of deployment options, including Docker and Kubernetes.
  • Built-in support for the most popular web development frameworks, such as Laravel, Symfony, and Express.

Kitura-NIO

  • Makes it easy to define routes and map them to specific functions.
  • Uses non-blocking I/O operations.
  • Provides native support for secure communication over TLS.

Trending Discussions on Networking

Microk8s dashboard using nginx-ingress via http not working (Error: `no matches for kind "Ingress" in version "extensions/v1beta1"`)

Laravel Homestead - page stopped working ERR_ADDRESS_UNREACHABLE

Accessing PostgreSQL (on wsl2) from DBeaver (on Windows) fails: "Connection refused: connect"

Why URL re-writing is not working when I do not use slash at the end?

Standard compliant host to network endianess conversion

How to configure proxy in emulators in new versions of Android Studio?

Unable to log egress traffic HTTP requests with the istio-proxy

Dynamodb local web shell does not load

Cancelling an async/await Network Request

How to configure GKE Autopilot w/Envoy & gRPC-Web

QUESTION

Microk8s dashboard using nginx-ingress via http not working (Error: `no matches for kind "Ingress" in version "extensions/v1beta1"`)

Asked 2022-Apr-01 at 07:26

I have microk8s v1.22.2 running on Ubuntu 20.04.3 LTS.

Output from /etc/hosts:

1127.0.0.1 localhost
2127.0.1.1 main
3

Excerpt from microk8s status:

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9

I checked for the running dashboard (kubectl get all --all-namespaces):

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    <none>        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   <none>        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   <none>        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           <none>                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39

I want to expose the microk8s dashboard within my local network to access it through http://main/dashboard/

To do so, I did the following nano ingress.yaml:

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    <none>        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   <none>        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   <none>        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           <none>                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39apiVersion: extensions/v1beta1
40kind: Ingress
41metadata:
42  annotations:
43    kubernetes.io/ingress.class: public
44    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
45  name: dashboard
46  namespace: kube-system
47spec:
48  rules:
49  - host: main
50    http:
51      paths:
52      - backend:
53          serviceName: kubernetes-dashboard
54          servicePort: 443
55        path: /
56

Enabling the ingress-config through kubectl apply -f ingress.yaml gave the following error:

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    <none>        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   <none>        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   <none>        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           <none>                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39apiVersion: extensions/v1beta1
40kind: Ingress
41metadata:
42  annotations:
43    kubernetes.io/ingress.class: public
44    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
45  name: dashboard
46  namespace: kube-system
47spec:
48  rules:
49  - host: main
50    http:
51      paths:
52      - backend:
53          serviceName: kubernetes-dashboard
54          servicePort: 443
55        path: /
56error: unable to recognize "ingress.yaml": no matches for kind "Ingress" in version "extensions/v1beta1"
57

Help would be much appreciated, thanks!

Update: @harsh-manvar pointed out a mismatch in the config version. I have rewritten ingress.yaml to a very stripped down version:

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    <none>        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   <none>        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   <none>        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           <none>                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39apiVersion: extensions/v1beta1
40kind: Ingress
41metadata:
42  annotations:
43    kubernetes.io/ingress.class: public
44    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
45  name: dashboard
46  namespace: kube-system
47spec:
48  rules:
49  - host: main
50    http:
51      paths:
52      - backend:
53          serviceName: kubernetes-dashboard
54          servicePort: 443
55        path: /
56error: unable to recognize "ingress.yaml": no matches for kind "Ingress" in version "extensions/v1beta1"
57apiVersion: networking.k8s.io/v1
58kind: Ingress
59metadata:
60  name: dashboard
61  namespace: kube-system
62spec:
63  rules:
64  - http:
65      paths:
66      - path: /dashboard
67        pathType: Prefix
68        backend:
69          service:
70            name: kubernetes-dashboard
71            port:
72              number: 443
73

Applying this works. Also, the ingress rule gets created.

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    <none>        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   <none>        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   <none>        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           <none>                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39apiVersion: extensions/v1beta1
40kind: Ingress
41metadata:
42  annotations:
43    kubernetes.io/ingress.class: public
44    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
45  name: dashboard
46  namespace: kube-system
47spec:
48  rules:
49  - host: main
50    http:
51      paths:
52      - backend:
53          serviceName: kubernetes-dashboard
54          servicePort: 443
55        path: /
56error: unable to recognize "ingress.yaml": no matches for kind "Ingress" in version "extensions/v1beta1"
57apiVersion: networking.k8s.io/v1
58kind: Ingress
59metadata:
60  name: dashboard
61  namespace: kube-system
62spec:
63  rules:
64  - http:
65      paths:
66      - path: /dashboard
67        pathType: Prefix
68        backend:
69          service:
70            name: kubernetes-dashboard
71            port:
72              number: 443
73NAMESPACE     NAME        CLASS    HOSTS   ADDRESS     PORTS   AGE
74kube-system   dashboard   public   *       127.0.0.1   80      11m
75

However, when I access the dashboard through http://<ip-of-kubernetes-master>/dashboard, I get a 400 error.

Log from the ingress controller:

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     &lt;none&gt;        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    &lt;none&gt;        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   &lt;none&gt;        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   &lt;none&gt;        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           &lt;none&gt;                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39apiVersion: extensions/v1beta1
40kind: Ingress
41metadata:
42  annotations:
43    kubernetes.io/ingress.class: public
44    nginx.ingress.kubernetes.io/backend-protocol: &quot;HTTPS&quot;
45  name: dashboard
46  namespace: kube-system
47spec:
48  rules:
49  - host: main
50    http:
51      paths:
52      - backend:
53          serviceName: kubernetes-dashboard
54          servicePort: 443
55        path: /
56error: unable to recognize &quot;ingress.yaml&quot;: no matches for kind &quot;Ingress&quot; in version &quot;extensions/v1beta1&quot;
57apiVersion: networking.k8s.io/v1
58kind: Ingress
59metadata:
60  name: dashboard
61  namespace: kube-system
62spec:
63  rules:
64  - http:
65      paths:
66      - path: /dashboard
67        pathType: Prefix
68        backend:
69          service:
70            name: kubernetes-dashboard
71            port:
72              number: 443
73NAMESPACE     NAME        CLASS    HOSTS   ADDRESS     PORTS   AGE
74kube-system   dashboard   public   *       127.0.0.1   80      11m
75192.168.0.123 - - [10/Oct/2021:21:38:47 +0000] &quot;GET /dashboard HTTP/1.1&quot; 400 54 &quot;-&quot; &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36&quot; 466 0.002 [kube-system-kubernetes-dashboard-443] [] 10.1.76.3:8443 48 0.000 400 ca0946230759edfbaaf9d94f3d5c959a
76

Does the dashboard also need to be exposed using the microk8s proxy? I thought the ingress controller would take care of this, or did I misunderstand this?

ANSWER

Answered 2021-Oct-10 at 18:29
1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     &lt;none&gt;        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    &lt;none&gt;        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   &lt;none&gt;        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   &lt;none&gt;        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           &lt;none&gt;                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39apiVersion: extensions/v1beta1
40kind: Ingress
41metadata:
42  annotations:
43    kubernetes.io/ingress.class: public
44    nginx.ingress.kubernetes.io/backend-protocol: &quot;HTTPS&quot;
45  name: dashboard
46  namespace: kube-system
47spec:
48  rules:
49  - host: main
50    http:
51      paths:
52      - backend:
53          serviceName: kubernetes-dashboard
54          servicePort: 443
55        path: /
56error: unable to recognize &quot;ingress.yaml&quot;: no matches for kind &quot;Ingress&quot; in version &quot;extensions/v1beta1&quot;
57apiVersion: networking.k8s.io/v1
58kind: Ingress
59metadata:
60  name: dashboard
61  namespace: kube-system
62spec:
63  rules:
64  - http:
65      paths:
66      - path: /dashboard
67        pathType: Prefix
68        backend:
69          service:
70            name: kubernetes-dashboard
71            port:
72              number: 443
73NAMESPACE     NAME        CLASS    HOSTS   ADDRESS     PORTS   AGE
74kube-system   dashboard   public   *       127.0.0.1   80      11m
75192.168.0.123 - - [10/Oct/2021:21:38:47 +0000] &quot;GET /dashboard HTTP/1.1&quot; 400 54 &quot;-&quot; &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36&quot; 466 0.002 [kube-system-kubernetes-dashboard-443] [] 10.1.76.3:8443 48 0.000 400 ca0946230759edfbaaf9d94f3d5c959a
76error: unable to recognize &quot;ingress.yaml&quot;: no matches for kind &quot;Ingress&quot; in version &quot;extensions/v1beta1&quot;
77

it' due to the mismatch in the ingress API version.

You are running the v1.22.2 while API version in YAML is old.

Good example : https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/

you are using the older ingress API version in your YAML which is extensions/v1beta1.

You need to change this based on ingress version and K8s version you are running.

This is for version 1.19 in K8s and will work in 1.22 also

Example :

1127.0.0.1 localhost
2127.0.1.1 main
3addons:
4  enabled:
5    dashboard            # The Kubernetes dashboard
6    ha-cluster           # Configure high availability on the current node
7    ingress              # Ingress controller for external access
8    metrics-server       # K8s Metrics Server for API access to service metrics
9NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
10kube-system   pod/calico-node-2jltr                            1/1     Running   0          23m
11kube-system   pod/calico-kube-controllers-f744bf684-d77hv      1/1     Running   0          23m
12kube-system   pod/metrics-server-85df567dd8-jd6gj              1/1     Running   0          22m
13kube-system   pod/kubernetes-dashboard-59699458b-pb5jb         1/1     Running   0          21m
14kube-system   pod/dashboard-metrics-scraper-58d4977855-94nsp   1/1     Running   0          21m
15ingress       pod/nginx-ingress-microk8s-controller-qf5pm      1/1     Running   0          21m
16
17NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
18default       service/kubernetes                  ClusterIP   10.152.183.1     &lt;none&gt;        443/TCP    23m
19kube-system   service/metrics-server              ClusterIP   10.152.183.81    &lt;none&gt;        443/TCP    22m
20kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.103   &lt;none&gt;        443/TCP    22m
21kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.197   &lt;none&gt;        8000/TCP   22m
22
23NAMESPACE     NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
24kube-system   daemonset.apps/calico-node                         1         1         1       1            1           kubernetes.io/os=linux   23m
25ingress       daemonset.apps/nginx-ingress-microk8s-controller   1         1         1       1            1           &lt;none&gt;                   22m
26
27NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
28kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           23m
29kube-system   deployment.apps/metrics-server              1/1     1            1           22m
30kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           22m
31kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           22m
32
33NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
34kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       23m
35kube-system   replicaset.apps/calico-kube-controllers-f744bf684      1         1         1       23m
36kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       22m
37kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       21m
38kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       21m
39apiVersion: extensions/v1beta1
40kind: Ingress
41metadata:
42  annotations:
43    kubernetes.io/ingress.class: public
44    nginx.ingress.kubernetes.io/backend-protocol: &quot;HTTPS&quot;
45  name: dashboard
46  namespace: kube-system
47spec:
48  rules:
49  - host: main
50    http:
51      paths:
52      - backend:
53          serviceName: kubernetes-dashboard
54          servicePort: 443
55        path: /
56error: unable to recognize &quot;ingress.yaml&quot;: no matches for kind &quot;Ingress&quot; in version &quot;extensions/v1beta1&quot;
57apiVersion: networking.k8s.io/v1
58kind: Ingress
59metadata:
60  name: dashboard
61  namespace: kube-system
62spec:
63  rules:
64  - http:
65      paths:
66      - path: /dashboard
67        pathType: Prefix
68        backend:
69          service:
70            name: kubernetes-dashboard
71            port:
72              number: 443
73NAMESPACE     NAME        CLASS    HOSTS   ADDRESS     PORTS   AGE
74kube-system   dashboard   public   *       127.0.0.1   80      11m
75192.168.0.123 - - [10/Oct/2021:21:38:47 +0000] &quot;GET /dashboard HTTP/1.1&quot; 400 54 &quot;-&quot; &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36&quot; 466 0.002 [kube-system-kubernetes-dashboard-443] [] 10.1.76.3:8443 48 0.000 400 ca0946230759edfbaaf9d94f3d5c959a
76error: unable to recognize &quot;ingress.yaml&quot;: no matches for kind &quot;Ingress&quot; in version &quot;extensions/v1beta1&quot;
77apiVersion: networking.k8s.io/v1
78kind: Ingress
79metadata:
80  name: minimal-ingress
81  annotations:
82    nginx.ingress.kubernetes.io/rewrite-target: /
83spec:
84  rules:
85  - http:
86      paths:
87      - path: /testpath
88        pathType: Prefix
89        backend:
90          service:
91            name: test
92            port:
93              number: 80
94

Source https://stackoverflow.com/questions/69517855

QUESTION

Laravel Homestead - page stopped working ERR_ADDRESS_UNREACHABLE

Asked 2022-Mar-25 at 09:10

Took my laptop out of house for a couple of days, didn't even get to turn it on during that time. Came back, ready to keep fiddling with my project but the page stopped working all of a sudden. I started getting ERR_ADDRESS_UNREACHABLE in the browser.

I've uninstalled homestead box, vagrant, virtualbox, with restart after each, re installed everything, same issue.

I can not ping the 192.168.10.10 address but I can SSH into the box no problem.

Running MacOS Big Sur, VirtualBox 6.1, Vagrant 2.2.18 and whatever the latest homestead version is. Really about quit programming altogether, this is super frustrating. I'd really appreciate any help. Thank you

Homestead.yaml

1---
2ip: &quot;192.168.10.10&quot;
3memory: 2048
4cpus: 2
5provider: virtualbox
6
7authorize: ~/.ssh/id_rsa.pub
8
9keys:
10    - ~/.ssh/id_rsa
11
12folders:
13    - map: ~/Documents/Code
14      to: /home/vagrant/code
15
16sites:
17    - map: homestead.test
18      to: /home/vagrant/code/PHP/test/public
19
20databases:
21    - homestead
22
23features:
24    - mysql: true
25    - mariadb: false
26    - postgresql: false
27    - ohmyzsh: false
28    - webdriver: false
29
30services:
31    - enabled:
32          - &quot;mysql&quot;
33

Vagrantfile

1---
2ip: &quot;192.168.10.10&quot;
3memory: 2048
4cpus: 2
5provider: virtualbox
6
7authorize: ~/.ssh/id_rsa.pub
8
9keys:
10    - ~/.ssh/id_rsa
11
12folders:
13    - map: ~/Documents/Code
14      to: /home/vagrant/code
15
16sites:
17    - map: homestead.test
18      to: /home/vagrant/code/PHP/test/public
19
20databases:
21    - homestead
22
23features:
24    - mysql: true
25    - mariadb: false
26    - postgresql: false
27    - ohmyzsh: false
28    - webdriver: false
29
30services:
31    - enabled:
32          - &quot;mysql&quot;
33# -*- mode: ruby -*-
34# vi: set ft=ruby :
35
36require 'json'
37require 'yaml'
38
39VAGRANTFILE_API_VERSION ||= &quot;2&quot;
40confDir = $confDir ||= File.expand_path(File.dirname(__FILE__))
41
42homesteadYamlPath = confDir + &quot;/Homestead.yaml&quot;
43homesteadJsonPath = confDir + &quot;/Homestead.json&quot;
44afterScriptPath = confDir + &quot;/after.sh&quot;
45customizationScriptPath = confDir + &quot;/user-customizations.sh&quot;
46aliasesPath = confDir + &quot;/aliases&quot;
47
48require File.expand_path(File.dirname(__FILE__) + '/scripts/homestead.rb')
49
50Vagrant.require_version '&gt;= 2.2.4'
51
52
53Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
54    if File.exist? aliasesPath then
55        config.vm.provision &quot;file&quot;, source: aliasesPath, destination: &quot;/tmp/bash_aliases&quot;
56        config.vm.provision &quot;handle_aliases&quot;, type: &quot;shell&quot; do |s|
57            s.inline = &quot;awk '{ sub(\&quot;\r$\&quot;, \&quot;\&quot;); print }' /tmp/bash_aliases &gt; /home/vagrant/.bash_aliases &amp;&amp; chown vagrant:vagrant /home/vagrant/.bash_aliases&quot;
58        end
59    end
60
61    if File.exist? homesteadYamlPath then
62        settings = YAML::load(File.read(homesteadYamlPath))
63    elsif File.exist? homesteadJsonPath then
64        settings = JSON::parse(File.read(homesteadJsonPath))
65    else
66        abort &quot;Homestead settings file not found in #{confDir}&quot;
67    end
68
69    Homestead.configure(config, settings)
70
71    if File.exist? afterScriptPath then
72        config.vm.provision &quot;Run after.sh&quot;, type: &quot;shell&quot;, path: afterScriptPath, privileged: false, keep_color: true
73    end
74
75    if File.exist? customizationScriptPath then
76        config.vm.provision &quot;Run customize script&quot;, type: &quot;shell&quot;, path: customizationScriptPath, privileged: false, keep_color: true
77    end
78
79    if Vagrant.has_plugin?('vagrant-hostsupdater')
80        config.hostsupdater.remove_on_suspend = false
81        config.hostsupdater.aliases = settings['sites'].map { |site| site['map'] }
82    elsif Vagrant.has_plugin?('vagrant-hostmanager')
83        config.hostmanager.enabled = true
84        config.hostmanager.manage_host = true
85        config.hostmanager.aliases = settings['sites'].map { |site| site['map'] }
86    elsif Vagrant.has_plugin?('vagrant-goodhosts')
87        config.goodhosts.aliases = settings['sites'].map { |site| site['map'] }
88    end
89
90    if Vagrant.has_plugin?('vagrant-notify-forwarder')
91        config.notify_forwarder.enable = true
92    end
93end
94

I did try to setup networking as described here and here but nothing worked. enter image description here

ANSWER

Answered 2021-Oct-29 at 20:41

I think this is the fix, but I couldn't get it running until now:

Anything in the 192.68.56.0/21 range will work out-of-the-box without any custom configuration per VirtualBox's documentation.

https://github.com/laravel/homestead/issues/1717

Found some more related information here:

https://discuss.hashicorp.com/t/vagrant-2-2-18-osx-11-6-cannot-create-private-network/30984/16


update 29.10.2021:
I downgraded virtualbox to 6.1.26 and it's working again.

Source https://stackoverflow.com/questions/69731953

QUESTION

Accessing PostgreSQL (on wsl2) from DBeaver (on Windows) fails: &quot;Connection refused: connect&quot;

Asked 2022-Mar-17 at 04:30

What I'm trying is to use Postgres and access it from DBeaver.

  • Postgres is installed into wsl2 (Ubuntu 20)
  • DBeaver is installed into Windows 10

According to this doc, if you access an app running on Linuc from Windows, localhost can be used.

However...

enter image description here

Connection is refused with localhost. Also, I don't know what this message means: Connection refused: connect.

Does anyone see potential cause for this? Any advice will be appreciated.

Note:

  • The password should be fine. When I use psql in wsl2 and type in the password, psql is available with the password
  • I don't have Postgres on Windows' side. It exists only on wsl2

ANSWER

Answered 2021-Oct-19 at 08:19

I found a solution by myself.

I just had to allow the TCP connection on wsl2(Ubuntu) and then restart postgres.

1sudo ufw allow 5432/tcp
2# You should see &quot;Rules updated&quot; and/or &quot;Rules updated (v6)&quot;
3sudo service postgresql restart
4

I didn't change IPv4/IPv6 connections info. Here's what I see in pg_hba.conf:

1sudo ufw allow 5432/tcp
2# You should see &quot;Rules updated&quot; and/or &quot;Rules updated (v6)&quot;
3sudo service postgresql restart
4# IPv4 local connections:
5host    all             all             127.0.0.1/32            md5
6# IPv6 local connections:
7host    all             all             ::1/128                 md5
8

Source https://stackoverflow.com/questions/69625823

QUESTION

Why URL re-writing is not working when I do not use slash at the end?

Asked 2022-Mar-13 at 20:40

I have a simple ingress configuration file-

1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  annotations:
5    nginx.ingress.kubernetes.io/rewrite-target: /link2/link3/
6  name: tut-ingress
7  namespace: default
8spec:
9  rules:
10    - host: tutorial.com
11      http:
12        paths:
13          - path: /link1/
14            pathType: Prefix
15            backend:
16              service:
17                name: nginx-ingress-tut-service
18                port:
19                  number: 8080
20

in which requests coming to /link1 or /link1/ are rewritten to /link2/link3/. When I access it using http://tutorial.com/link1/ I am shown the correct result but when I access it using http://tutorial.com/link1, I get a 404 not found. The nginx-ingress-tut-service has the following endpoints-

  • /
  • /link1
  • /link2/link3

I am a beginner in the web domain, any help will be appreciated.

When I change it to-

1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  annotations:
5    nginx.ingress.kubernetes.io/rewrite-target: /link2/link3/
6  name: tut-ingress
7  namespace: default
8spec:
9  rules:
10    - host: tutorial.com
11      http:
12        paths:
13          - path: /link1/
14            pathType: Prefix
15            backend:
16              service:
17                name: nginx-ingress-tut-service
18                port:
19                  number: 8080
20- path: /link1
21

it starts working fine, but can anybody tell why is it not working with /link1/.

Helpful resources - https://kubernetes.io/docs/concepts/services-networking/ingress/#examples

https://kubernetes.github.io/ingress-nginx/examples/rewrite/

Edit- Please also explain what happens when you write a full HTTP link in nginx.ingress.kubernetes.io/rewrite-target

ANSWER

Answered 2022-Mar-13 at 20:40

The answer is posted in the comment:

Well, /link1/ is not a prefix of /link1 because a prefix must be the same length or longer than the target string

If you have

1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  annotations:
5    nginx.ingress.kubernetes.io/rewrite-target: /link2/link3/
6  name: tut-ingress
7  namespace: default
8spec:
9  rules:
10    - host: tutorial.com
11      http:
12        paths:
13          - path: /link1/
14            pathType: Prefix
15            backend:
16              service:
17                name: nginx-ingress-tut-service
18                port:
19                  number: 8080
20- path: /link1
21- path: /link1/
22

the string to match will have to have a / character at the end of the path. Everything works correctly. In this situation if you try to access by the link http://tutorial.com/link1 you will get 404 error, because ingress was expecting http://tutorial.com/link1/.

For more you can see examples of rewrite rule and documentation about path types:

Each path in an Ingress is required to have a corresponding path type. Paths that do not include an explicit pathType will fail validation. There are three supported path types:

  • ImplementationSpecific: With this path type, matching is up to the IngressClass. Implementations can treat this as a separate pathType or treat it identically to Prefix or Exact path types.

  • Exact: Matches the URL path exactly and with case sensitivity.

  • Prefix: Matches based on a URL path prefix split by /. Matching is case sensitive and done on a path element by element basis. A path element refers to the list of labels in the path split by the / separator. A request is a match for path p if every p is an element-wise prefix of p of the request path.

EDIT: Based on documentation this should work, but it looks like there is a fresh problem with nginx ingress. The problem is still unresolved. You can use workaround posted in this topic or try to change your you similar to this:

1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  annotations:
5    nginx.ingress.kubernetes.io/rewrite-target: /link2/link3/
6  name: tut-ingress
7  namespace: default
8spec:
9  rules:
10    - host: tutorial.com
11      http:
12        paths:
13          - path: /link1/
14            pathType: Prefix
15            backend:
16              service:
17                name: nginx-ingress-tut-service
18                port:
19                  number: 8080
20- path: /link1
21- path: /link1/
22- path: /link1(/|$)
23

Source https://stackoverflow.com/questions/71424259

QUESTION

Standard compliant host to network endianess conversion

Asked 2022-Mar-03 at 15:19

I am amazed at how many topics on StackOverflow deal with finding out the endianess of the system and converting endianess. I am even more amazed that there are hundreds of different answers to these two questions. All proposed solutions that I have seen so far are based on undefined behaviour, non-standard compiler extensions or OS-specific header files. In my opinion, this question is only a duplicate if an existing answer gives a standard-compliant, efficient (e.g., use x86-bswap), compile time-enabled solution.

Surely there must be a standard-compliant solution available that I am unable to find in the huge mess of old "hacky" ones. It is also somewhat strange that the standard library does not include such a function. Perhaps the attitude towards such issues is changing, since C++20 introduced a way to detect endianess into the standard (via std::endian), and C++23 will probably include std::byteswap, which flips endianess.

In any case, my questions are these:

  1. Starting at what C++ standard is there a portable standard-compliant way of performing host to network byte order conversion?

  2. I argue below that it's possible in C++20. Is my code correct and can it be improved?

  3. Should such a pure-c++ solution be preferred to OS specific functions such as, e.g., POSIX-htonl? (I think yes)

I think I can give a C++23 solution that is OS-independent, efficient (no system call, uses x86-bswap) and portable to little-endian and big-endian systems (but not portable to mixed-endian systems):

1// requires C++23. see https://gcc.godbolt.org/z/6or1sEvKn
2#include &lt;type_traits&gt;
3#include &lt;utility&gt;
4#include &lt;bit&gt;
5
6constexpr inline auto host_to_net(std::integral auto i) {
7    static_assert(std::endian::native == std::endian::big || std::endian::native == std::endian::little);
8    if constexpr (std::endian::native == std::endian::big) {
9        return i;
10    } else {
11        return std::byteswap(i);
12    }
13}
14

Since std::endian is available in C++20, one can give a C++20 solution for host_to_net by implementing byteswap manually. A solution is described here, quote:

1// requires C++23. see https://gcc.godbolt.org/z/6or1sEvKn
2#include &lt;type_traits&gt;
3#include &lt;utility&gt;
4#include &lt;bit&gt;
5
6constexpr inline auto host_to_net(std::integral auto i) {
7    static_assert(std::endian::native == std::endian::big || std::endian::native == std::endian::little);
8    if constexpr (std::endian::native == std::endian::big) {
9        return i;
10    } else {
11        return std::byteswap(i);
12    }
13}
14// requires C++17
15#include &lt;climits&gt;
16#include &lt;cstdint&gt;
17#include &lt;type_traits&gt;
18
19template&lt;class T, std::size_t... N&gt;
20constexpr T bswap_impl(T i, std::index_sequence&lt;N...&gt;) {
21  return ((((i &gt;&gt; (N * CHAR_BIT)) &amp; (T)(unsigned char)(-1)) &lt;&lt;
22           ((sizeof(T) - 1 - N) * CHAR_BIT)) | ...);
23}; //                                        ^~~~~ fold expression
24template&lt;class T, class U = typename std::make_unsigned&lt;T&gt;::type&gt;
25constexpr U bswap(T i) {
26  return bswap_impl&lt;U&gt;(i, std::make_index_sequence&lt;sizeof(T)&gt;{});
27}
28

The linked answer also provides a C++11 byteswap, but that one seems to be less efficient (not compiled to x86-bswap). I think there should be an efficient C++11 way of doing this, too (using either less template-nonsense or even more) but I don't care about older C++ and didn't really try.

Assuming I am correct, the remaining question is: can one can determine system endianess before C++20 at compile time in a standard-compliant and compiler-agnostic way? None of the answers here seem to do achieve this. They use reinterpret_cast (not compile time), OS-headers, union aliasing (which I believe is UB in C++), etc. Also, for some reason, they try to do it "at runtime" although a compiled executable will always run under the same endianess.)

One could do it outside of constexpr context and hope it's optimized away. On the other hand, one could use system-defined preprocessor definitions and account for all platforms, as seems to be the approach taken by Boost. Or maybe (although I would guess the other way is better?) use macros and pick platform-specific htnl-style functions from networking libraries(done, e.g., here (GitHub))?

ANSWER

Answered 2022-Feb-06 at 05:48

compile time-enabled solution.

Consider whether this is useful requirement in the first place. The program isn't going to be communicating with another system at compile time. What is the case where you would need to use the serialised integer in a compile time constant context?

  1. Starting at what C++ standard is there a portable standard-compliant way of performing host to network byte order conversion?

It's possible to write such function in standard C++ since C++98. That said, later standards bring tasty template goodies that make this nicer.

There isn't such function in the standard library as of the latest standard.

  1. Should such a pure-c++ solution be preferred to OS specific functions such as, e.g., POSIX-htonl? (I think yes)

Advantage of POSIX is that it's less important to write tests to make sure that it works correctly.

Advantage of pure C++ function is that you don't need platform specific alternatives to those that don't conform to POSIX.

Also, the POSIX htonX are only for 16 bit and 32 bit integers. You could instead use htobeXX functions instead that are in some *BSD and in Linux (glibc).


Here is what I have been using since C+17. Some notes beforehand:

  • Since endianness conversion is always1 for purposes of serialisation, I write the result directly into a buffer. When converting to host endianness, I read from a buffer.

  • I don't use CHAR_BIT because network doesn't know my byte size anyway. Network byte is an octet, and if your CPU is different, then these functions won't work. Correct handling of non-octet byte is possible but unnecessary work unless you need to support network communication on such system. Adding an assert might be a good idea.

  • I prefer to call it big endian rather than "network" endian. There's a chance that a reader isn't aware of the convention that de-facto endianness of network is big.

  • Instead of checking "if native endianness is X, do Y else do Z", I prefer to write a function that works with all native endianness. This can be done with bit shifts.

  • Yeah, it's constexpr. Not because it needs to be, but just because it can be. I haven't been able to produce an example where dropping constexpr would produce worse code.

1// requires C++23. see https://gcc.godbolt.org/z/6or1sEvKn
2#include &lt;type_traits&gt;
3#include &lt;utility&gt;
4#include &lt;bit&gt;
5
6constexpr inline auto host_to_net(std::integral auto i) {
7    static_assert(std::endian::native == std::endian::big || std::endian::native == std::endian::little);
8    if constexpr (std::endian::native == std::endian::big) {
9        return i;
10    } else {
11        return std::byteswap(i);
12    }
13}
14// requires C++17
15#include &lt;climits&gt;
16#include &lt;cstdint&gt;
17#include &lt;type_traits&gt;
18
19template&lt;class T, std::size_t... N&gt;
20constexpr T bswap_impl(T i, std::index_sequence&lt;N...&gt;) {
21  return ((((i &gt;&gt; (N * CHAR_BIT)) &amp; (T)(unsigned char)(-1)) &lt;&lt;
22           ((sizeof(T) - 1 - N) * CHAR_BIT)) | ...);
23}; //                                        ^~~~~ fold expression
24template&lt;class T, class U = typename std::make_unsigned&lt;T&gt;::type&gt;
25constexpr U bswap(T i) {
26  return bswap_impl&lt;U&gt;(i, std::make_index_sequence&lt;sizeof(T)&gt;{});
27}
28// helper to promote an integer type
29template &lt;class T&gt;
30using promote_t = std::decay_t&lt;decltype(+std::declval&lt;T&gt;())&gt;;
31
32template &lt;class T, std::size_t... I&gt;
33constexpr void
34host_to_big_impl(
35    unsigned char* buf,
36    T t,
37    [[maybe_unused]] std::index_sequence&lt;I...&gt;) noexcept
38{
39    using U = std::make_unsigned_t&lt;promote_t&lt;T&gt;&gt;;
40    constexpr U lastI = sizeof(T) - 1u;
41    constexpr U bits = 8u;
42    U u = t;
43    ( (buf[I] = u &gt;&gt; ((lastI - I) * bits)), ... );
44}
45
46
47template &lt;class T, std::size_t... I&gt;
48constexpr void
49host_to_big(unsigned char* buf, T t) noexcept
50{
51    using Indices = std::make_index_sequence&lt;sizeof(T)&gt;;
52    return host_to_big_impl&lt;T&gt;(buf, t, Indices{});
53}
54

1 In all use cases I've encountered. Conversions from integer to integer can be implemented by delegating these if you have such case, although they cannot be constexpr due to need for reinterpret_cast.

Source https://stackoverflow.com/questions/71003780

QUESTION

How to configure proxy in emulators in new versions of Android Studio?

Asked 2022-Feb-23 at 14:14
Problem Description

I need to configure the proxy manually in my emulator through Android Studio. From the official Android documentation, it is suggested that this change can be made in the "settings" tab of the emulator's extended controls. The problem is that it seems to me that this documentation is outdated, as this setting is no longer displayed in the "settings" tab of the Android Studio emulators' extended controls.

Documentation

with proxy

My Android Studio

without proxy

My version of Android Studio
1Android Studio Bumblebee | 2021.1.1
2Build #AI-211.7628.21.2111.8092744, built on January 19, 2022
3Runtime version: 11.0.11+9-b60-7590822 amd64
4VM: OpenJDK 64-Bit Server VM by Oracle Corporation
5Windows 10 10.0
6GC: G1 Young Generation, G1 Old Generation
7Memory: 1280M
8Cores: 8
9Registry: external.system.auto.import.disabled=true
10Non-Bundled Plugins: com.wakatime.intellij.plugin (13.1.10), wu.seal.tool.jsontokotlin (3.7.2), org.jetbrains.kotlin (211-1.6.10-release-923-AS7442.40), com.developerphil.adbidea (1.6.4), org.jetbrains.compose.desktop.ide (1.0.0), ru.adelf.idea.dotenv (2021.2), org.intellij.plugins.markdown (211.7142.37)
11

ANSWER

Answered 2022-Feb-17 at 19:12

After a while trying to find solutions to this problem, I saw that an emulator running outside android studio provides these options. To run a standalone Android Studio emulator see the official documentation or simply enter the command:

1Android Studio Bumblebee | 2021.1.1
2Build #AI-211.7628.21.2111.8092744, built on January 19, 2022
3Runtime version: 11.0.11+9-b60-7590822 amd64
4VM: OpenJDK 64-Bit Server VM by Oracle Corporation
5Windows 10 10.0
6GC: G1 Young Generation, G1 Old Generation
7Memory: 1280M
8Cores: 8
9Registry: external.system.auto.import.disabled=true
10Non-Bundled Plugins: com.wakatime.intellij.plugin (13.1.10), wu.seal.tool.jsontokotlin (3.7.2), org.jetbrains.kotlin (211-1.6.10-release-923-AS7442.40), com.developerphil.adbidea (1.6.4), org.jetbrains.compose.desktop.ide (1.0.0), ru.adelf.idea.dotenv (2021.2), org.intellij.plugins.markdown (211.7142.37)
11emulator -avd &lt;avd_name&gt;
12

In my case I'm using an avd named PIXEL 4 API 30, so the command will be emulator -avd PIXEL_4_API_30. If you are on Windows you may have problems running this command so I suggest you see this.

Edit

The solution proposed by @Inliner also solves this problem.

Source https://stackoverflow.com/questions/70972106

QUESTION

Unable to log egress traffic HTTP requests with the istio-proxy

Asked 2022-Feb-11 at 10:45

I am following this guide.

Ingress requests are getting logged. Egress traffic control is working as expected, except I am unable to log egress HTTP requests. What is missing?

1apiVersion: networking.istio.io/v1beta1
2kind: Sidecar
3metadata:
4  name: myapp
5spec:
6  workloadSelector:
7    labels:
8      app: myapp
9
10  outboundTrafficPolicy:
11    mode: REGISTRY_ONLY
12
13  egress:
14    - hosts:
15        - default/*.example.com
16
1apiVersion: networking.istio.io/v1beta1
2kind: Sidecar
3metadata:
4  name: myapp
5spec:
6  workloadSelector:
7    labels:
8      app: myapp
9
10  outboundTrafficPolicy:
11    mode: REGISTRY_ONLY
12
13  egress:
14    - hosts:
15        - default/*.example.com
16apiVersion: networking.istio.io/v1alpha3
17kind: ServiceEntry
18metadata:
19  name: example
20
21spec:
22  location: MESH_EXTERNAL
23  resolution: NONE
24  hosts:
25    - '*.example.com'
26
27  ports:
28    - name: https
29      protocol: TLS
30      number: 443
31
1apiVersion: networking.istio.io/v1beta1
2kind: Sidecar
3metadata:
4  name: myapp
5spec:
6  workloadSelector:
7    labels:
8      app: myapp
9
10  outboundTrafficPolicy:
11    mode: REGISTRY_ONLY
12
13  egress:
14    - hosts:
15        - default/*.example.com
16apiVersion: networking.istio.io/v1alpha3
17kind: ServiceEntry
18metadata:
19  name: example
20
21spec:
22  location: MESH_EXTERNAL
23  resolution: NONE
24  hosts:
25    - '*.example.com'
26
27  ports:
28    - name: https
29      protocol: TLS
30      number: 443
31apiVersion: telemetry.istio.io/v1alpha1
32kind: Telemetry
33metadata:
34  name: mesh-default
35  namespace: istio-system
36spec:
37  accessLogging:
38    - providers:
39        - name: envoy
40
41

Kubernetes 1.22.2 Istio 1.11.4

ANSWER

Answered 2022-Feb-07 at 17:14

AFAIK istio collects only ingress HTTP logs by default.

In the istio documentation there is an old article (from 2018) describing how to enable egress traffic HTTP logs.

Please keep in mind that some of the information may be outdated, however I believe this is the part that you are missing.

Source https://stackoverflow.com/questions/71018977

QUESTION

Dynamodb local web shell does not load

Asked 2022-Jan-15 at 14:55

I am running DynamoDB locally using the instructions here. To remove potential docker networking issues I am using the "Download Locally" version of the instructions. Before running dynamo locally I run aws configure to set some fake values for AWS access, secret, and region, and here is the output:

1$ aws configure
2AWS Access Key ID [****************fake]:
3AWS Secret Access Key [****************ake2]:
4Default region name [local]:
5Default output format [json]:
6

here is the output of running dynamo locally:

1$ aws configure
2AWS Access Key ID [****************fake]:
3AWS Secret Access Key [****************ake2]:
4Default region name [local]:
5Default output format [json]:
6$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
7Initializing DynamoDB Local with the following configuration:
8Port:   8000
9InMemory:   false
10DbPath: null
11SharedDb:   true
12shouldDelayTransientStatuses:   false
13CorsParams: *
14

I can confirm that the DynamoDB is running locally successfully by listing tables using aws cli

1$ aws configure
2AWS Access Key ID [****************fake]:
3AWS Secret Access Key [****************ake2]:
4Default region name [local]:
5Default output format [json]:
6$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
7Initializing DynamoDB Local with the following configuration:
8Port:   8000
9InMemory:   false
10DbPath: null
11SharedDb:   true
12shouldDelayTransientStatuses:   false
13CorsParams: *
14$ aws dynamodb list-tables --endpoint-url http://localhost:8000
15{
16    &quot;TableNames&quot;: []
17}
18

but when I visit http://localhost:8000/shell in my browser, this is the error I get and the page does not load. enter image description here

I tried running curl on the shell to see if I can get a more useful error message:

1$ aws configure
2AWS Access Key ID [****************fake]:
3AWS Secret Access Key [****************ake2]:
4Default region name [local]:
5Default output format [json]:
6$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
7Initializing DynamoDB Local with the following configuration:
8Port:   8000
9InMemory:   false
10DbPath: null
11SharedDb:   true
12shouldDelayTransientStatuses:   false
13CorsParams: *
14$ aws dynamodb list-tables --endpoint-url http://localhost:8000
15{
16    &quot;TableNames&quot;: []
17}
18$ curl http://localhost:8000/shell
19{
20&quot;__type&quot;:&quot;com.amazonaws.dynamodb.v20120810#MissingAuthenticationToken&quot;,
21&quot;Message&quot;:&quot;Request must contain either a valid (registered) AWS access key ID or X.509 certificate.&quot;}%
22

I tried looking up the error above, but I don't have much choice in doing setup when running the shell merely in the browser. Any help is appreciated on how I can run the Dynamodb javascript web shell with this setting.

Software versions:

aws cli: aws-cli/2.4.7 Python/3.9.9 Darwin/20.6.0 source/x86_64 prompt/off

OS: MacOS Big Sur 11.6.2 (20G314)

ANSWER

Answered 2022-Jan-13 at 08:12

As I answered in DynamoDB local http://localhost:8000/shell this appears to be a regression in new versions of DynamoDB Local, where the shell mysteriously stopped working, whereas in versions from a year ago it does work.

Somebody should report it to Amazon. If there is some flag that new versions require you to set to enable the shell, it isn't documented anywhere that I can find.

Source https://stackoverflow.com/questions/70535330

QUESTION

Cancelling an async/await Network Request

Asked 2022-Jan-03 at 22:23

I have a networking layer that currently uses completion handlers to deliver a result on the operation is complete.

As I support a number of iOS versions, I instead extend the network layer within the app to provide support for Combine. I'd like to extend this to now also a support Async/Await but I am struggling to understand how I can achieve this in a way that allows me to cancel requests.

The basic implementation looks like;

1
2protocol HTTPClientTask {
3    func cancel()
4}
5
6protocol HTTPClient {
7    typealias Result = Swift.Result&lt;(data: Data, response: HTTPURLResponse), Error&gt;
8    @discardableResult
9    func dispatch(_ request: URLRequest, completion: @escaping (Result) -&gt; Void) -&gt; HTTPClientTask
10}
11
12final class URLSessionHTTPClient: HTTPClient {
13    
14    private let session: URLSession
15    
16    init(session: URLSession) {
17        self.session = session
18    }
19    
20    func dispatch(_ request: URLRequest, completion: @escaping (HTTPClient.Result) -&gt; Void) -&gt; HTTPClientTask {
21        let task = session.dataTask(with: request) { data, response, error in
22            completion(Result {
23                if let error = error {
24                    throw error
25                } else if let data = data, let response = response as? HTTPURLResponse {
26                    return (data, response)
27                } else {
28                    throw UnexpectedValuesRepresentation()
29                }
30            })
31        }
32        task.resume()
33        return URLSessionTaskWrapper(wrapped: task)
34    }
35}
36
37private extension URLSessionHTTPClient {
38    struct UnexpectedValuesRepresentation: Error {}
39    
40    struct URLSessionTaskWrapper: HTTPClientTask {
41        let wrapped: URLSessionTask
42        
43        func cancel() {
44            wrapped.cancel()
45        }
46    }
47}
48

It very simply provides an abstraction that allows me to inject a URLSession instance.

By returning HTTPClientTask I can call cancel from a client and end the request.

I extend this in a client app using Combine as follows;

1
2protocol HTTPClientTask {
3    func cancel()
4}
5
6protocol HTTPClient {
7    typealias Result = Swift.Result&lt;(data: Data, response: HTTPURLResponse), Error&gt;
8    @discardableResult
9    func dispatch(_ request: URLRequest, completion: @escaping (Result) -&gt; Void) -&gt; HTTPClientTask
10}
11
12final class URLSessionHTTPClient: HTTPClient {
13    
14    private let session: URLSession
15    
16    init(session: URLSession) {
17        self.session = session
18    }
19    
20    func dispatch(_ request: URLRequest, completion: @escaping (HTTPClient.Result) -&gt; Void) -&gt; HTTPClientTask {
21        let task = session.dataTask(with: request) { data, response, error in
22            completion(Result {
23                if let error = error {
24                    throw error
25                } else if let data = data, let response = response as? HTTPURLResponse {
26                    return (data, response)
27                } else {
28                    throw UnexpectedValuesRepresentation()
29                }
30            })
31        }
32        task.resume()
33        return URLSessionTaskWrapper(wrapped: task)
34    }
35}
36
37private extension URLSessionHTTPClient {
38    struct UnexpectedValuesRepresentation: Error {}
39    
40    struct URLSessionTaskWrapper: HTTPClientTask {
41        let wrapped: URLSessionTask
42        
43        func cancel() {
44            wrapped.cancel()
45        }
46    }
47}
48extension HTTPClient {
49    typealias Publisher = AnyPublisher&lt;(data: Data, response: HTTPURLResponse), Error&gt;
50
51    func dispatchPublisher(for request: URLRequest) -&gt; Publisher {
52        var task: HTTPClientTask?
53
54        return Deferred {
55            Future { completion in
56                task = self.dispatch(request, completion: completion)
57            }
58        }
59        .handleEvents(receiveCancel: { task?.cancel() })
60        .eraseToAnyPublisher()
61    }
62}
63

As you can see I now have an interface that supports canceling tasks.

Using async/await however, I am unsure what this should look like, how I can provide a mechanism for canceling requests.

My current attempt is;

1
2protocol HTTPClientTask {
3    func cancel()
4}
5
6protocol HTTPClient {
7    typealias Result = Swift.Result&lt;(data: Data, response: HTTPURLResponse), Error&gt;
8    @discardableResult
9    func dispatch(_ request: URLRequest, completion: @escaping (Result) -&gt; Void) -&gt; HTTPClientTask
10}
11
12final class URLSessionHTTPClient: HTTPClient {
13    
14    private let session: URLSession
15    
16    init(session: URLSession) {
17        self.session = session
18    }
19    
20    func dispatch(_ request: URLRequest, completion: @escaping (HTTPClient.Result) -&gt; Void) -&gt; HTTPClientTask {
21        let task = session.dataTask(with: request) { data, response, error in
22            completion(Result {
23                if let error = error {
24                    throw error
25                } else if let data = data, let response = response as? HTTPURLResponse {
26                    return (data, response)
27                } else {
28                    throw UnexpectedValuesRepresentation()
29                }
30            })
31        }
32        task.resume()
33        return URLSessionTaskWrapper(wrapped: task)
34    }
35}
36
37private extension URLSessionHTTPClient {
38    struct UnexpectedValuesRepresentation: Error {}
39    
40    struct URLSessionTaskWrapper: HTTPClientTask {
41        let wrapped: URLSessionTask
42        
43        func cancel() {
44            wrapped.cancel()
45        }
46    }
47}
48extension HTTPClient {
49    typealias Publisher = AnyPublisher&lt;(data: Data, response: HTTPURLResponse), Error&gt;
50
51    func dispatchPublisher(for request: URLRequest) -&gt; Publisher {
52        var task: HTTPClientTask?
53
54        return Deferred {
55            Future { completion in
56                task = self.dispatch(request, completion: completion)
57            }
58        }
59        .handleEvents(receiveCancel: { task?.cancel() })
60        .eraseToAnyPublisher()
61    }
62}
63extension HTTPClient {
64    func dispatch(_ request: URLRequest) async -&gt; HTTPClient.Result {
65
66        let task = Task { () -&gt; (data: Data, response: HTTPURLResponse) in
67            return try await withCheckedThrowingContinuation { continuation in
68                self.dispatch(request) { result in
69                    switch result {
70                    case let .success(values): continuation.resume(returning: values)
71                    case let .failure(error): continuation.resume(throwing: error)
72                    }
73                }
74            }
75        }
76
77        do {
78            let output = try await task.value
79            return .success(output)
80        } catch {
81            return .failure(error)
82        }
83    }
84}
85

However this simply provides the async implementation, I am unable to cancel this.

How should this be handled?

ANSWER

Answered 2021-Oct-10 at 13:42

async/await might not be the proper paradigm if you want cancellation. The reason is that the new structured concurrency support in Swift allows you to write code that looks single-threaded/synchronous, but it fact it's multi-threaded.

Take for example a naive synchronous code:

1
2protocol HTTPClientTask {
3    func cancel()
4}
5
6protocol HTTPClient {
7    typealias Result = Swift.Result&lt;(data: Data, response: HTTPURLResponse), Error&gt;
8    @discardableResult
9    func dispatch(_ request: URLRequest, completion: @escaping (Result) -&gt; Void) -&gt; HTTPClientTask
10}
11
12final class URLSessionHTTPClient: HTTPClient {
13    
14    private let session: URLSession
15    
16    init(session: URLSession) {
17        self.session = session
18    }
19    
20    func dispatch(_ request: URLRequest, completion: @escaping (HTTPClient.Result) -&gt; Void) -&gt; HTTPClientTask {
21        let task = session.dataTask(with: request) { data, response, error in
22            completion(Result {
23                if let error = error {
24                    throw error
25                } else if let data = data, let response = response as? HTTPURLResponse {
26                    return (data, response)
27                } else {
28                    throw UnexpectedValuesRepresentation()
29                }
30            })
31        }
32        task.resume()
33        return URLSessionTaskWrapper(wrapped: task)
34    }
35}
36
37private extension URLSessionHTTPClient {
38    struct UnexpectedValuesRepresentation: Error {}
39    
40    struct URLSessionTaskWrapper: HTTPClientTask {
41        let wrapped: URLSessionTask
42        
43        func cancel() {
44            wrapped.cancel()
45        }
46    }
47}
48extension HTTPClient {
49    typealias Publisher = AnyPublisher&lt;(data: Data, response: HTTPURLResponse), Error&gt;
50
51    func dispatchPublisher(for request: URLRequest) -&gt; Publisher {
52        var task: HTTPClientTask?
53
54        return Deferred {
55            Future { completion in
56                task = self.dispatch(request, completion: completion)
57            }
58        }
59        .handleEvents(receiveCancel: { task?.cancel() })
60        .eraseToAnyPublisher()
61    }
62}
63extension HTTPClient {
64    func dispatch(_ request: URLRequest) async -&gt; HTTPClient.Result {
65
66        let task = Task { () -&gt; (data: Data, response: HTTPURLResponse) in
67            return try await withCheckedThrowingContinuation { continuation in
68                self.dispatch(request) { result in
69                    switch result {
70                    case let .success(values): continuation.resume(returning: values)
71                    case let .failure(error): continuation.resume(throwing: error)
72                    }
73                }
74            }
75        }
76
77        do {
78            let output = try await task.value
79            return .success(output)
80        } catch {
81            return .failure(error)
82        }
83    }
84}
85let data = tryData(contentsOf: fileURL)
86

If the file is huge, then it might take a lot of time for the operation to finish, and during this time the operation cannot be cancelled, and the caller thread is blocked.

Now, assuming Data exports an async version of the above initializer, you'd write the async version of the code similar to this:

1
2protocol HTTPClientTask {
3    func cancel()
4}
5
6protocol HTTPClient {
7    typealias Result = Swift.Result&lt;(data: Data, response: HTTPURLResponse), Error&gt;
8    @discardableResult
9    func dispatch(_ request: URLRequest, completion: @escaping (Result) -&gt; Void) -&gt; HTTPClientTask
10}
11
12final class URLSessionHTTPClient: HTTPClient {
13    
14    private let session: URLSession
15    
16    init(session: URLSession) {
17        self.session = session
18    }
19    
20    func dispatch(_ request: URLRequest, completion: @escaping (HTTPClient.Result) -&gt; Void) -&gt; HTTPClientTask {
21        let task = session.dataTask(with: request) { data, response, error in
22            completion(Result {
23                if let error = error {
24                    throw error
25                } else if let data = data, let response = response as? HTTPURLResponse {
26                    return (data, response)
27                } else {
28                    throw UnexpectedValuesRepresentation()
29                }
30            })
31        }
32        task.resume()
33        return URLSessionTaskWrapper(wrapped: task)
34    }
35}
36
37private extension URLSessionHTTPClient {
38    struct UnexpectedValuesRepresentation: Error {}
39    
40    struct URLSessionTaskWrapper: HTTPClientTask {
41        let wrapped: URLSessionTask
42        
43        func cancel() {
44            wrapped.cancel()
45        }
46    }
47}
48extension HTTPClient {
49    typealias Publisher = AnyPublisher&lt;(data: Data, response: HTTPURLResponse), Error&gt;
50
51    func dispatchPublisher(for request: URLRequest) -&gt; Publisher {
52        var task: HTTPClientTask?
53
54        return Deferred {
55            Future { completion in
56                task = self.dispatch(request, completion: completion)
57            }
58        }
59        .handleEvents(receiveCancel: { task?.cancel() })
60        .eraseToAnyPublisher()
61    }
62}
63extension HTTPClient {
64    func dispatch(_ request: URLRequest) async -&gt; HTTPClient.Result {
65
66        let task = Task { () -&gt; (data: Data, response: HTTPURLResponse) in
67            return try await withCheckedThrowingContinuation { continuation in
68                self.dispatch(request) { result in
69                    switch result {
70                    case let .success(values): continuation.resume(returning: values)
71                    case let .failure(error): continuation.resume(throwing: error)
72                    }
73                }
74            }
75        }
76
77        do {
78            let output = try await task.value
79            return .success(output)
80        } catch {
81            return .failure(error)
82        }
83    }
84}
85let data = tryData(contentsOf: fileURL)
86let data = try await Data(contentsOf: fileURL)
87

For the developer, it's the same coding style, once the operation finishes, they'll either have a data variable to use, or they'll be receiving an error.

In both cases, there's no cancellation built in, as the operation is synchronous from the developer's perspective. The major difference is that the await-ed call doesn't block the caller thread, but on the other hand once the control flow returns it might well be that the code continues executing on a different thread.

Now, if you need support for cancellation, then you'll have to store somewhere some identifiable data that can be used to cancel the operation.

If you'll want to store those identifiers from the caller scope, then you'll need to split your operation in two: initialization, and execution.

Something along the lines of

1
2protocol HTTPClientTask {
3    func cancel()
4}
5
6protocol HTTPClient {
7    typealias Result = Swift.Result&lt;(data: Data, response: HTTPURLResponse), Error&gt;
8    @discardableResult
9    func dispatch(_ request: URLRequest, completion: @escaping (Result) -&gt; Void) -&gt; HTTPClientTask
10}
11
12final class URLSessionHTTPClient: HTTPClient {
13    
14    private let session: URLSession
15    
16    init(session: URLSession) {
17        self.session = session
18    }
19    
20    func dispatch(_ request: URLRequest, completion: @escaping (HTTPClient.Result) -&gt; Void) -&gt; HTTPClientTask {
21        let task = session.dataTask(with: request) { data, response, error in
22            completion(Result {
23                if let error = error {
24                    throw error
25                } else if let data = data, let response = response as? HTTPURLResponse {
26                    return (data, response)
27                } else {
28                    throw UnexpectedValuesRepresentation()
29                }
30            })
31        }
32        task.resume()
33        return URLSessionTaskWrapper(wrapped: task)
34    }
35}
36
37private extension URLSessionHTTPClient {
38    struct UnexpectedValuesRepresentation: Error {}
39    
40    struct URLSessionTaskWrapper: HTTPClientTask {
41        let wrapped: URLSessionTask
42        
43        func cancel() {
44            wrapped.cancel()
45        }
46    }
47}
48extension HTTPClient {
49    typealias Publisher = AnyPublisher&lt;(data: Data, response: HTTPURLResponse), Error&gt;
50
51    func dispatchPublisher(for request: URLRequest) -&gt; Publisher {
52        var task: HTTPClientTask?
53
54        return Deferred {
55            Future { completion in
56                task = self.dispatch(request, completion: completion)
57            }
58        }
59        .handleEvents(receiveCancel: { task?.cancel() })
60        .eraseToAnyPublisher()
61    }
62}
63extension HTTPClient {
64    func dispatch(_ request: URLRequest) async -&gt; HTTPClient.Result {
65
66        let task = Task { () -&gt; (data: Data, response: HTTPURLResponse) in
67            return try await withCheckedThrowingContinuation { continuation in
68                self.dispatch(request) { result in
69                    switch result {
70                    case let .success(values): continuation.resume(returning: values)
71                    case let .failure(error): continuation.resume(throwing: error)
72                    }
73                }
74            }
75        }
76
77        do {
78            let output = try await task.value
79            return .success(output)
80        } catch {
81            return .failure(error)
82        }
83    }
84}
85let data = tryData(contentsOf: fileURL)
86let data = try await Data(contentsOf: fileURL)
87extension HTTPClient {
88    // note that this is not async
89    func task(for request: URLRequest) -&gt; HTTPClientTask {
90        // ...
91    }
92}
93
94class HTTPClientTask {
95    func dispatch() async -&gt; HTTPClient.Result {
96        // ...
97    }
98}
99
100let task = httpClient.task(for: urlRequest)
101self.theTask = task
102let result = await task.dispatch()
103
104// somewhere outside the await scope
105self.theTask.cancel()
106

Source https://stackoverflow.com/questions/69506002

QUESTION

How to configure GKE Autopilot w/Envoy &amp; gRPC-Web

Asked 2021-Dec-14 at 20:31

I have an application running on my local machine that uses React -> gRPC-Web -> Envoy -> Go app and everything runs with no problems. I'm trying to deploy this using GKE Autopilot and I just haven't been able to get the configuration right. I'm new to all of GCP/GKE, so I'm looking for help to figure out where I'm going wrong.

I was following this doc initially, even though I only have one gRPC service: https://cloud.google.com/architecture/exposing-grpc-services-on-gke-using-envoy-proxy

From what I've read, GKE Autopilot mode requires using External HTTP(s) load balancing instead of Network Load Balancing as described in the above solution, so I've been trying to get that to work. After a variety of attempts, my current strategy has an Ingress, BackendConfig, Service, and Deployment. The deployment has three containers: my app, an Envoy sidecar to transform the gRPC-Web requests and responses, and a cloud SQL proxy sidecar. I eventually want to be using TLS, but for now, I left that out so it wouldn't complicate things even more.

When I apply all of the configs, the backend service shows one backend in one zone and the health check fails. The health check is set for port 8080 and path /healthz which is what I think I've specified in the deployment config, but I'm suspicious because when I look at the details for the envoy-sidecar container, it shows the Readiness probe as: http-get HTTP://:0/healthz headers=x-envoy-livenessprobe:healthz. Does ":0" just mean it's using the default address and port for the container, or does indicate a config problem?

I've been reading various docs and just haven't been able to piece it all together. Is there an example somewhere that shows how this can be done? I've been searching and haven't found one.

My current configs are:

1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  name: grammar-games-ingress
5  #annotations:
6    # If the class annotation is not specified it defaults to &quot;gce&quot;.
7    # kubernetes.io/ingress.class: &quot;gce&quot;
8    # kubernetes.io/ingress.global-static-ip-name: &lt;IP addr&gt;
9spec:
10  defaultBackend:
11    service:
12      name: grammar-games-core
13      port:
14        number: 80
15---
16apiVersion: cloud.google.com/v1
17kind: BackendConfig
18metadata:
19  name: grammar-games-bec
20  annotations:
21    cloud.google.com/neg: '{&quot;ingress&quot;: true}'
22spec:
23  sessionAffinity:
24    affinityType: &quot;CLIENT_IP&quot;  
25  healthCheck:
26    checkIntervalSec: 15
27    port: 8080
28    type: HTTP
29    requestPath: /healthz
30  timeoutSec: 60
31---
32apiVersion: v1
33kind: Service
34metadata:
35  name: grammar-games-core
36  annotations:
37    cloud.google.com/neg: '{&quot;ingress&quot;: true}'
38    cloud.google.com/app-protocols: '{&quot;http&quot;:&quot;HTTP&quot;}'
39    cloud.google.com/backend-config: '{&quot;default&quot;: &quot;grammar-games-bec&quot;}'
40spec:
41  type: ClusterIP
42  selector:
43    app: grammar-games-core
44  ports:
45  - name: http
46    protocol: TCP
47    port: 80
48    targetPort: 8080
49---
50apiVersion: apps/v1
51kind: Deployment
52metadata:
53  name: grammar-games-core
54spec:
55  # Two replicas for right now, just so I can see how RPC calls get directed.
56  # replicas: 2
57  selector:
58    matchLabels:
59      app: grammar-games-core
60  template:
61    metadata:
62      labels:
63        app: grammar-games-core
64    spec:
65      serviceAccountName: grammar-games-core-k8sa
66      containers:
67      - name: grammar-games-core
68        image: gcr.io/grammar-games/grammar-games-core:1.1.2
69        command:
70          - &quot;/bin/grammar-games-core&quot;
71        ports:
72        - containerPort: 52001
73        env:
74        - name: GAMESDB_USER
75          valueFrom:
76            secretKeyRef:
77              name: gamesdb-config
78              key: username
79        - name: GAMESDB_PASSWORD
80          valueFrom:
81            secretKeyRef:
82              name: gamesdb-config
83              key: password
84        - name: GAMESDB_DB_NAME
85          valueFrom:
86            secretKeyRef:
87              name: gamesdb-config
88              key: db-name 
89        - name: GRPC_SERVER_PORT
90          value: '52001'
91        - name: GAMES_LOG_FILE_PATH
92          value: ''
93        - name: GAMESDB_LOG_LEVEL
94          value: 'debug'
95        resources:
96          requests:
97            # The proxy's memory use scales linearly with the number of active
98            # connections. Fewer open connections will use less memory. Adjust
99            # this value based on your application's requirements.
100            memory: &quot;2Gi&quot;
101            # The proxy's CPU use scales linearly with the amount of IO between
102            # the database and the application. Adjust this value based on your
103            # application's requirements.
104            cpu:    &quot;1&quot;
105        readinessProbe:
106          exec:
107            command: [&quot;/bin/grpc_health_probe&quot;, &quot;-addr=:52001&quot;]
108          initialDelaySeconds: 5
109      - name: cloud-sql-proxy
110        # It is recommended to use the latest version of the Cloud SQL proxy
111        # Make sure to update on a regular schedule!
112        image: gcr.io/cloudsql-docker/gce-proxy:1.24.0
113        command:
114          - &quot;/cloud_sql_proxy&quot;
115
116          # If connecting from a VPC-native GKE cluster, you can use the
117          # following flag to have the proxy connect over private IP
118          # - &quot;-ip_address_types=PRIVATE&quot;
119
120          # Replace DB_PORT with the port the proxy should listen on
121          # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
122          - &quot;-instances=grammar-games:us-east1:grammar-games-db=tcp:3306&quot;
123        securityContext:
124          # The default Cloud SQL proxy image runs as the
125          # &quot;nonroot&quot; user and group (uid: 65532) by default.
126          runAsNonRoot: true
127        # Resource configuration depends on an application's requirements. You
128        # should adjust the following values based on what your application
129        # needs. For details, see https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
130        resources:
131          requests:
132            # The proxy's memory use scales linearly with the number of active
133            # connections. Fewer open connections will use less memory. Adjust
134            # this value based on your application's requirements.
135            memory: &quot;2Gi&quot;
136            # The proxy's CPU use scales linearly with the amount of IO between
137            # the database and the application. Adjust this value based on your
138            # application's requirements.
139            cpu:    &quot;1&quot;
140      - name: envoy-sidecar
141        image: envoyproxy/envoy:v1.20-latest
142        ports:
143        - name: http
144          containerPort: 8080
145        resources:
146          requests:
147            cpu: 10m
148            ephemeral-storage: 256Mi
149            memory: 256Mi
150        volumeMounts:
151        - name: config
152          mountPath: /etc/envoy
153        readinessProbe:
154          httpGet:
155            port: http
156            httpHeaders:
157            - name: x-envoy-livenessprobe
158              value: healthz
159            path: /healthz
160            scheme: HTTP
161      volumes:
162      - name: config
163        configMap:
164          name: envoy-sidecar-conf      
165---
166apiVersion: v1
167kind: ConfigMap
168metadata:
169  name: envoy-sidecar-conf
170data:
171  envoy.yaml: |
172    static_resources:
173      listeners:
174      - name: listener_0
175        address:
176          socket_address:
177            address: 0.0.0.0
178            port_value: 8080
179        filter_chains:
180        - filters:
181          - name: envoy.filters.network.http_connection_manager
182            typed_config:
183              &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
184              access_log:
185              - name: envoy.access_loggers.stdout
186                typed_config:
187                  &quot;@type&quot;: type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
188              codec_type: AUTO
189              stat_prefix: ingress_http
190              route_config:
191                name: local_route
192                virtual_hosts:
193                - name: http
194                  domains:
195                  - &quot;*&quot;
196                  routes:
197                  - match:
198                      prefix: &quot;/grammar_games_protos.GrammarGames/&quot;
199                    route:
200                      cluster: grammar-games-core-grpc
201                  cors:
202                    allow_origin_string_match:
203                    - prefix: &quot;*&quot;
204                    allow_methods: GET, PUT, DELETE, POST, OPTIONS
205                    allow_headers: keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout
206                    max_age: &quot;1728000&quot;
207                    expose_headers: custom-header-1,grpc-status,grpc-message
208              http_filters:
209              - name: envoy.filters.http.health_check
210                typed_config:
211                  &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck
212                  pass_through_mode: false
213                  headers:
214                  - name: &quot;:path&quot;
215                    exact_match: &quot;/healthz&quot;
216                  - name: &quot;x-envoy-livenessprobe&quot;
217                    exact_match: &quot;healthz&quot;
218              - name: envoy.filters.http.grpc_web
219              - name: envoy.filters.http.cors
220              - name: envoy.filters.http.router
221                typed_config: {}
222      clusters:
223      - name: grammar-games-core-grpc
224        connect_timeout: 0.5s
225        type: logical_dns
226        lb_policy: ROUND_ROBIN
227        http2_protocol_options: {}
228        load_assignment:
229          cluster_name: grammar-games-core-grpc
230          endpoints:
231          - lb_endpoints:
232            - endpoint:
233                address:
234                  socket_address:
235                    address: 0.0.0.0
236                    port_value: 52001
237        health_checks:
238          timeout: 1s
239          interval: 10s
240          unhealthy_threshold: 2
241          healthy_threshold: 2
242          grpc_health_check: {}
243    admin:
244      access_log_path: /dev/stdout
245      address:
246        socket_address:
247          address: 127.0.0.1
248          port_value: 8090
249
250

ANSWER

Answered 2021-Oct-14 at 22:35

Here is some documentation about Setting up HTTP(S) Load Balancing with Ingress. This tutorial shows how to run a web application behind an external HTTP(S) load balancer by configuring the Ingress resource.

Related to Creating a HTTP Load Balancer on GKE using Ingress, I found two threads where instances created are marked as unhealthy.

In the first one, they mention the necessity to manually enable a firewall rule to allow http load balancer ip range to pass health check.

In the second one, they mention that the Pod’s spec must also include containerPort. Example:

1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4  name: grammar-games-ingress
5  #annotations:
6    # If the class annotation is not specified it defaults to &quot;gce&quot;.
7    # kubernetes.io/ingress.class: &quot;gce&quot;
8    # kubernetes.io/ingress.global-static-ip-name: &lt;IP addr&gt;
9spec:
10  defaultBackend:
11    service:
12      name: grammar-games-core
13      port:
14        number: 80
15---
16apiVersion: cloud.google.com/v1
17kind: BackendConfig
18metadata:
19  name: grammar-games-bec
20  annotations:
21    cloud.google.com/neg: '{&quot;ingress&quot;: true}'
22spec:
23  sessionAffinity:
24    affinityType: &quot;CLIENT_IP&quot;  
25  healthCheck:
26    checkIntervalSec: 15
27    port: 8080
28    type: HTTP
29    requestPath: /healthz
30  timeoutSec: 60
31---
32apiVersion: v1
33kind: Service
34metadata:
35  name: grammar-games-core
36  annotations:
37    cloud.google.com/neg: '{&quot;ingress&quot;: true}'
38    cloud.google.com/app-protocols: '{&quot;http&quot;:&quot;HTTP&quot;}'
39    cloud.google.com/backend-config: '{&quot;default&quot;: &quot;grammar-games-bec&quot;}'
40spec:
41  type: ClusterIP
42  selector:
43    app: grammar-games-core
44  ports:
45  - name: http
46    protocol: TCP
47    port: 80
48    targetPort: 8080
49---
50apiVersion: apps/v1
51kind: Deployment
52metadata:
53  name: grammar-games-core
54spec:
55  # Two replicas for right now, just so I can see how RPC calls get directed.
56  # replicas: 2
57  selector:
58    matchLabels:
59      app: grammar-games-core
60  template:
61    metadata:
62      labels:
63        app: grammar-games-core
64    spec:
65      serviceAccountName: grammar-games-core-k8sa
66      containers:
67      - name: grammar-games-core
68        image: gcr.io/grammar-games/grammar-games-core:1.1.2
69        command:
70          - &quot;/bin/grammar-games-core&quot;
71        ports:
72        - containerPort: 52001
73        env:
74        - name: GAMESDB_USER
75          valueFrom:
76            secretKeyRef:
77              name: gamesdb-config
78              key: username
79        - name: GAMESDB_PASSWORD
80          valueFrom:
81            secretKeyRef:
82              name: gamesdb-config
83              key: password
84        - name: GAMESDB_DB_NAME
85          valueFrom:
86            secretKeyRef:
87              name: gamesdb-config
88              key: db-name 
89        - name: GRPC_SERVER_PORT
90          value: '52001'
91        - name: GAMES_LOG_FILE_PATH
92          value: ''
93        - name: GAMESDB_LOG_LEVEL
94          value: 'debug'
95        resources:
96          requests:
97            # The proxy's memory use scales linearly with the number of active
98            # connections. Fewer open connections will use less memory. Adjust
99            # this value based on your application's requirements.
100            memory: &quot;2Gi&quot;
101            # The proxy's CPU use scales linearly with the amount of IO between
102            # the database and the application. Adjust this value based on your
103            # application's requirements.
104            cpu:    &quot;1&quot;
105        readinessProbe:
106          exec:
107            command: [&quot;/bin/grpc_health_probe&quot;, &quot;-addr=:52001&quot;]
108          initialDelaySeconds: 5
109      - name: cloud-sql-proxy
110        # It is recommended to use the latest version of the Cloud SQL proxy
111        # Make sure to update on a regular schedule!
112        image: gcr.io/cloudsql-docker/gce-proxy:1.24.0
113        command:
114          - &quot;/cloud_sql_proxy&quot;
115
116          # If connecting from a VPC-native GKE cluster, you can use the
117          # following flag to have the proxy connect over private IP
118          # - &quot;-ip_address_types=PRIVATE&quot;
119
120          # Replace DB_PORT with the port the proxy should listen on
121          # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
122          - &quot;-instances=grammar-games:us-east1:grammar-games-db=tcp:3306&quot;
123        securityContext:
124          # The default Cloud SQL proxy image runs as the
125          # &quot;nonroot&quot; user and group (uid: 65532) by default.
126          runAsNonRoot: true
127        # Resource configuration depends on an application's requirements. You
128        # should adjust the following values based on what your application
129        # needs. For details, see https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
130        resources:
131          requests:
132            # The proxy's memory use scales linearly with the number of active
133            # connections. Fewer open connections will use less memory. Adjust
134            # this value based on your application's requirements.
135            memory: &quot;2Gi&quot;
136            # The proxy's CPU use scales linearly with the amount of IO between
137            # the database and the application. Adjust this value based on your
138            # application's requirements.
139            cpu:    &quot;1&quot;
140      - name: envoy-sidecar
141        image: envoyproxy/envoy:v1.20-latest
142        ports:
143        - name: http
144          containerPort: 8080
145        resources:
146          requests:
147            cpu: 10m
148            ephemeral-storage: 256Mi
149            memory: 256Mi
150        volumeMounts:
151        - name: config
152          mountPath: /etc/envoy
153        readinessProbe:
154          httpGet:
155            port: http
156            httpHeaders:
157            - name: x-envoy-livenessprobe
158              value: healthz
159            path: /healthz
160            scheme: HTTP
161      volumes:
162      - name: config
163        configMap:
164          name: envoy-sidecar-conf      
165---
166apiVersion: v1
167kind: ConfigMap
168metadata:
169  name: envoy-sidecar-conf
170data:
171  envoy.yaml: |
172    static_resources:
173      listeners:
174      - name: listener_0
175        address:
176          socket_address:
177            address: 0.0.0.0
178            port_value: 8080
179        filter_chains:
180        - filters:
181          - name: envoy.filters.network.http_connection_manager
182            typed_config:
183              &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
184              access_log:
185              - name: envoy.access_loggers.stdout
186                typed_config:
187                  &quot;@type&quot;: type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
188              codec_type: AUTO
189              stat_prefix: ingress_http
190              route_config:
191                name: local_route
192                virtual_hosts:
193                - name: http
194                  domains:
195                  - &quot;*&quot;
196                  routes:
197                  - match:
198                      prefix: &quot;/grammar_games_protos.GrammarGames/&quot;
199                    route:
200                      cluster: grammar-games-core-grpc
201                  cors:
202                    allow_origin_string_match:
203                    - prefix: &quot;*&quot;
204                    allow_methods: GET, PUT, DELETE, POST, OPTIONS
205                    allow_headers: keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout
206                    max_age: &quot;1728000&quot;
207                    expose_headers: custom-header-1,grpc-status,grpc-message
208              http_filters:
209              - name: envoy.filters.http.health_check
210                typed_config:
211                  &quot;@type&quot;: type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck
212                  pass_through_mode: false
213                  headers:
214                  - name: &quot;:path&quot;
215                    exact_match: &quot;/healthz&quot;
216                  - name: &quot;x-envoy-livenessprobe&quot;
217                    exact_match: &quot;healthz&quot;
218              - name: envoy.filters.http.grpc_web
219              - name: envoy.filters.http.cors
220              - name: envoy.filters.http.router
221                typed_config: {}
222      clusters:
223      - name: grammar-games-core-grpc
224        connect_timeout: 0.5s
225        type: logical_dns
226        lb_policy: ROUND_ROBIN
227        http2_protocol_options: {}
228        load_assignment:
229          cluster_name: grammar-games-core-grpc
230          endpoints:
231          - lb_endpoints:
232            - endpoint:
233                address:
234                  socket_address:
235                    address: 0.0.0.0
236                    port_value: 52001
237        health_checks:
238          timeout: 1s
239          interval: 10s
240          unhealthy_threshold: 2
241          healthy_threshold: 2
242          grpc_health_check: {}
243    admin:
244      access_log_path: /dev/stdout
245      address:
246        socket_address:
247          address: 127.0.0.1
248          port_value: 8090
249
250spec:
251  containers:
252  - name: nginx
253    image: nginx:1.7.9
254    ports:
255    - containerPort: 80
256

Source https://stackoverflow.com/questions/69560536

Community Discussions contain sources that include Stack Exchange Network

Tutorials and Learning Resources in Networking

Share this Page

share link

Get latest updates on Networking