Because it must. Yes, /etc/resolv.conf should keep changing as long as some other service needs to update it.
And here lies the problem: which service? We need more information.
From the simple description in your question, there are only two interfaces, one is lo, which has no need to change /etc/resolv.conf, and the other is eth0, which is using the dhcp service. The dhcp service must renew its lease from the upstream router, switch, or, in your case, most probably, the virtual dhcp server from libvirt and inside the bridge.
I am assuming that the description of two interfaces is by looking at the configuration inside the VM, not the configuration of the guest.
One option, then, , may be to tell the dhcpclient to override the servers given by the DHCP lease by adding to /etc/dhcp/dhclient.conf inside your VM this line:
supersede domain-name-servers 1.1.1.1, 2.2.2.2, 3.3.3.3;
Or by prepending, that is, add as first DNS resolvers, with the line:
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
The Iceberg
The problem is way more complex than the above "tip of the iceberg" may indicate.
The virtual network configuration is complex. You must ensure that the bridge, which I assume is providing the 192.168.150.zz address (not the default xx.yy.122.zz) is correctly configured. Please read https://wiki.libvirt.org/page/VirtualNetworking
There are also many other alternative programs that could be updating the /etc/resolv.conf file. From your description it doesn't seem that, in this case, any of them is the problem. But so you know, there has been a very long competiton to take control of /etc/resolv.conf over the years, it is very present even today. Some programs that could want to take control of /etc/resolv.conf and change it from time to time are:
resolvconf. A program designed to take absolute control of /etc/resolv.conf and avoid any other program from changing it. Remove it.
Network Manager (which you don't report you are using). It has several entries to define a dns server to use. You might reset its configuration (by moving its configuration file), or disable it and see if it solves the problem.
- The file
/etc/network/interfaces might contain DNS configuration lines, which doesn't seem to be the case here.
- The
systemd resolved service might be setting the local server 127.0.0.53, which you don't report Related.
dnsmasq or similar DNS server migt be configured to take control of resolv.conf. Check if there is a dnsmasq program running.
- The
dhclient might be updating (as it should) dhcp.conf for each new lease. As explained above.